@ayo-dev/core
Advanced tools
+149
-2
@@ -6,3 +6,3 @@ /** | ||
| */ | ||
| import type { Ayo, AyoContext, AyoKind, AyoSound, Handle, Recipients, Urgency } from "./message.js"; | ||
| import type { AskAnswer, AskMeta, Ayo, AyoContext, AyoKind, AyoSound, Handle, Recipients, Urgency } from "./message.js"; | ||
| import type { AyoId, TeamId, UserId } from "./ids.js"; | ||
@@ -20,3 +20,3 @@ import type { MemberPresence, PresenceStatus } from "./wire.js"; | ||
| } | ||
| export type ApiErrorCode = "unauthorized" | "invalid_token" | "team_not_found" | "not_found" | "not_a_member" | "unknown_recipient" | "bad_request" | "rate_limited" | "payload_too_large" | "internal_error"; | ||
| export type ApiErrorCode = "unauthorized" | "invalid_token" | "team_not_found" | "not_found" | "not_a_member" | "forbidden" | "unknown_recipient" | "bad_request" | "rate_limited" | "team_full" | "payload_too_large" | "internal_error"; | ||
| export interface DeviceStartResponse { | ||
@@ -78,3 +78,9 @@ device_code: string; | ||
| joinCode?: string; | ||
| /** Set when the code came from a handoff link — the joiner lands in a | ||
| * relationship, not an empty room ("Maya invited you"). */ | ||
| invitedBy?: Handle; | ||
| } | ||
| /** Bounds for an anonymous reply from a handoff share page. */ | ||
| export declare const MAX_LINK_REPLY_LENGTH = 2000; | ||
| export declare const MAX_LINK_REPLY_NAME_LENGTH = 40; | ||
| /** `GET /v1/teams/:id/invite` — the active team's shareable invite (members only). */ | ||
@@ -84,6 +90,129 @@ export interface InviteResponse { | ||
| joinCode: string; | ||
| /** ISO timestamp the code expires, or null if it never does. Lets `ayo invite` | ||
| * warn instead of pasting a dead code. Optional for backward-compat with an | ||
| * older relay that doesn't send it. */ | ||
| codeExpiresAt?: string | null; | ||
| } | ||
| /** `POST /v1/teams/:id/rotate-code` — owner rotates the join code (revokes the old | ||
| * one); optional expiry. Members cap is server-enforced (see MAX_TEAM_SIZE). */ | ||
| export interface RotateCodeRequest { | ||
| /** Optional: auto-expire the new code after N hours (omit = no expiry). */ | ||
| expiresInHours?: number; | ||
| } | ||
| export interface RotateCodeResponse { | ||
| joinCode: string; | ||
| /** ISO timestamp, or null if the code doesn't expire. */ | ||
| expiresAt: string | null; | ||
| } | ||
| /** Max members per team — a leaked, non-rotating code + no cap = a floodable team. */ | ||
| export declare const MAX_TEAM_SIZE = 50; | ||
| /** Default lifetime of a handoff share link. Links are ephemeral by design — a | ||
| * handoff is a "pick this up now" artifact, not a permanent document. */ | ||
| export declare const HANDOFF_LINK_TTL_HOURS: number; | ||
| /** Hard cap so a caller can't mint a near-permanent public URL. */ | ||
| export declare const HANDOFF_LINK_MAX_TTL_HOURS: number; | ||
| /** Cap on a serialized share snapshot (guards KV + the public render path). The | ||
| * diff alone is already capped at MAX_DIFF_BYTES; this bounds the whole packet. */ | ||
| export declare const MAX_HANDOFF_SHARE_BYTES: number; | ||
| /** `POST /v1/teams/:id/handoff-link` — mint a shareable link for a handoff. */ | ||
| export interface CreateHandoffLinkRequest { | ||
| /** What the recipient needs to pick up (the handoff body). */ | ||
| blocker: string; | ||
| /** Optional summary / next steps. */ | ||
| note?: string; | ||
| /** Curated work context; the caller decides what to include (diff is opt-in). */ | ||
| context?: AyoContext; | ||
| /** Auto-expire after N hours; clamped to [~1 min, HANDOFF_LINK_MAX_TTL_HOURS]. */ | ||
| expiresInHours?: number; | ||
| /** Embed a join code so a non-user installs → joins in one step. Default true. | ||
| * The embedded code is PER-LINK (minted fresh, expires with the link, carries | ||
| * the inviter) — rotating the team code never kills a live handoff link. */ | ||
| includeJoinCode?: boolean; | ||
| /** The handoff Ayo this link renders — replies from the page thread to it. */ | ||
| ayoId?: AyoId; | ||
| } | ||
| export interface CreateHandoffLinkResponse { | ||
| token: string; | ||
| /** Absolute URL to share. */ | ||
| url: string; | ||
| /** ISO timestamp the link expires. */ | ||
| expiresAt: string; | ||
| } | ||
| /** The self-contained snapshot a share link renders. Everything the public page | ||
| * needs, so the render path never touches the team DO. `v` guards the shape. | ||
| * teamId/fromId/ayoId are ROUTING fields for the reply flow — stored, never | ||
| * rendered on the public page. */ | ||
| export interface HandoffShare { | ||
| v: 1; | ||
| from: { | ||
| handle: Handle; | ||
| name: string; | ||
| }; | ||
| /** Routing (reply → the sender's inbox); never rendered. */ | ||
| teamId: TeamId; | ||
| fromId: UserId; | ||
| /** The handoff Ayo this link renders; replies thread to it. */ | ||
| ayoId?: AyoId; | ||
| teamName: string; | ||
| blocker: string; | ||
| note?: string; | ||
| context?: AyoContext; | ||
| /** Present iff the sender opted to embed it — enables the 1-step join CTA. */ | ||
| joinCode?: string; | ||
| /** The embedded join code's own expiry (codes rotate/expire independently of | ||
| * the link) — lets the page flag a stale code instead of a dead command. | ||
| * null = the code doesn't expire; absent = no code embedded. */ | ||
| joinCodeExpiresAt?: string | null; | ||
| createdAt: string; | ||
| expiresAt: string; | ||
| } | ||
| export interface MembersResponse { | ||
| members: MemberPresence[]; | ||
| } | ||
| /** `POST /v1/teams/:id/hooks` — mint a revocable inbound webhook (member only). */ | ||
| export interface CreateWebhookRequest { | ||
| /** Source name shown on inbound pings, e.g. "ci", "github". */ | ||
| label: string; | ||
| /** Default recipient handle; omit to broadcast to the team. */ | ||
| to?: Handle; | ||
| /** Mint a GitHub webhook: HMAC-verified, POSTed to /v1/gh/<token>, and routed | ||
| * by event (review requests, @mentions, review submissions) rather than `to`. | ||
| * The response carries a one-time `secret` to paste into GitHub. */ | ||
| github?: boolean; | ||
| } | ||
| /** A minted/listed webhook. `token` is a bearer secret. On CREATE the creator | ||
| * always gets it. On LIST, only the creator sees the token/url of their own | ||
| * hooks — for others' hooks `token`/`url` are empty strings (metadata only), so | ||
| * a member can't lift a teammate's URL and spoof pings as them. */ | ||
| export interface WebhookInfo { | ||
| token: string; | ||
| /** The full curl-able URL: `<relay>/v1/hooks/<token>` (empty if not yours). */ | ||
| url: string; | ||
| label: string; | ||
| to?: Handle; | ||
| createdAt: string; | ||
| /** Handle of the member who created the hook (present on LIST). */ | ||
| createdBy?: Handle; | ||
| /** "github" for a GitHub webhook (routes by event); absent = generic. */ | ||
| kind?: "github"; | ||
| /** The HMAC secret to paste into GitHub — returned ONCE on create for a github | ||
| * hook, never on list. */ | ||
| secret?: string; | ||
| } | ||
| export type CreateWebhookResponse = WebhookInfo; | ||
| export interface ListWebhooksResponse { | ||
| hooks: WebhookInfo[]; | ||
| } | ||
| /** Body a caller POSTs to `/v1/hooks/:token`. Only `text` is required (one curl). | ||
| * `urgency` is capped at "normal" server-side — inbound automation never breaks | ||
| * through a recipient's heads-down/dnd focus (suppression is first-class). */ | ||
| export interface WebhookPingRequest { | ||
| text: string; | ||
| /** Override the hook's default recipient(s); `["*"]` broadcasts. */ | ||
| to?: Recipients; | ||
| /** "low" | "normal" only; "urgent" is coerced to "normal". */ | ||
| urgency?: Urgency; | ||
| /** Optional headline shown above the text. */ | ||
| title?: string; | ||
| } | ||
| /** Body of `POST /v1/teams/:id/ayo` — the server fills id/from/createdAt. */ | ||
@@ -97,4 +226,22 @@ export interface SendAyoRequest { | ||
| replyTo?: AyoId | null; | ||
| /** Required semantics when kind === "ask" (options optional). */ | ||
| ask?: AskMeta; | ||
| expiresAt?: string | null; | ||
| } | ||
| /** Bounds for an ask's suggested options (rendered as ready-made commands). */ | ||
| export declare const MAX_ASK_OPTIONS = 8; | ||
| export declare const MAX_ASK_OPTION_LENGTH = 80; | ||
| /** `POST /v1/ayo/:id/answer` — answer an ask addressed to you. */ | ||
| export interface AnswerAskRequest { | ||
| answer: string; | ||
| } | ||
| /** `GET /v1/ayo/:id/answer` — poll an ask's state (the asking agent long-polls | ||
| * this until answered or its own deadline passes). */ | ||
| export interface AskStateResponse { | ||
| answered: boolean; | ||
| /** Present iff answered. */ | ||
| answer?: AskAnswer; | ||
| /** True once the ask's expiresAt has passed unanswered. */ | ||
| expired: boolean; | ||
| } | ||
| export interface SendAyoResponse { | ||
@@ -101,0 +248,0 @@ id: AyoId; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"} |
+19
-0
@@ -10,2 +10,21 @@ /** | ||
| export const DEFAULT_RELAY_URL = "https://ayo-relay.wkoverfield.workers.dev"; | ||
| /** Bounds for an anonymous reply from a handoff share page. */ | ||
| export const MAX_LINK_REPLY_LENGTH = 2000; | ||
| export const MAX_LINK_REPLY_NAME_LENGTH = 40; | ||
| /** Max members per team — a leaked, non-rotating code + no cap = a floodable team. */ | ||
| export const MAX_TEAM_SIZE = 50; | ||
| // ── Handoff share links ("Loom mechanic": a public, expiring URL that renders a | ||
| // handoff's context to a NON-user and converts them) ─────────────────────── | ||
| /** Default lifetime of a handoff share link. Links are ephemeral by design — a | ||
| * handoff is a "pick this up now" artifact, not a permanent document. */ | ||
| export const HANDOFF_LINK_TTL_HOURS = 7 * 24; | ||
| /** Hard cap so a caller can't mint a near-permanent public URL. */ | ||
| export const HANDOFF_LINK_MAX_TTL_HOURS = 30 * 24; | ||
| /** Cap on a serialized share snapshot (guards KV + the public render path). The | ||
| * diff alone is already capped at MAX_DIFF_BYTES; this bounds the whole packet. */ | ||
| export const MAX_HANDOFF_SHARE_BYTES = 128 * 1024; | ||
| // ── Asks (blocking agent questions; see AskMeta/AskAnswer in message.ts) ───── | ||
| /** Bounds for an ask's suggested options (rendered as ready-made commands). */ | ||
| export const MAX_ASK_OPTIONS = 8; | ||
| export const MAX_ASK_OPTION_LENGTH = 80; | ||
| //# sourceMappingURL=api.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEhC;iFACiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,2CAA2C,CAAC"} | ||
| {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEhC;iFACiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,2CAA2C,CAAC;AAuF7E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAwB7C,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAEhC,iFAAiF;AACjF,gFAAgF;AAEhF;0EAC0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,CAAC;AAC7C,mEAAmE;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,CAAC;AAClD;oFACoF;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,GAAG,IAAI,CAAC;AA6HlD,gFAAgF;AAEhF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC"} |
+21
-2
@@ -6,3 +6,16 @@ /** | ||
| export type Urgency = "low" | "normal" | "urgent"; | ||
| export type AyoKind = "ping" | "handoff"; | ||
| export type AyoKind = "ping" | "handoff" | "ask"; | ||
| /** Ask-specific payload (`kind: "ask"`): a blocking question from an agent that | ||
| * stays pinned until answered. Options are suggestions — free text always works. */ | ||
| export interface AskMeta { | ||
| /** Suggested answers, rendered as ready-made `ayo answer` commands. */ | ||
| options?: string[]; | ||
| } | ||
| /** The recorded answer to an ask (stored by the team DO, joined into inbox reads). */ | ||
| export interface AskAnswer { | ||
| answer: string; | ||
| by: Handle; | ||
| /** ISO timestamp. */ | ||
| at: string; | ||
| } | ||
| /** A handle is a per-team display name; defaults to GitHub login, aliasable. */ | ||
@@ -63,3 +76,9 @@ export type Handle = string; | ||
| replyTo?: AyoId | null; | ||
| /** ISO timestamp; null = never expires. */ | ||
| /** Present iff kind === "ask". */ | ||
| ask?: AskMeta; | ||
| /** Denormalized read-model field: the DO stamps this onto kind==="ask" items | ||
| * when serving the inbox (null = unanswered ask; absent = not an ask). The | ||
| * authoritative record lives in DO storage. */ | ||
| askAnswer?: AskAnswer | null; | ||
| /** ISO timestamp; null = never expires. For asks this is the answer deadline. */ | ||
| expiresAt?: string | null; | ||
@@ -66,0 +85,0 @@ /** The sender's chosen sound, stamped by the relay. null/absent = recipient default. */ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAmDrG,mEAAmE;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AA0BxC,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,MAAM;IACN,MAAM;IACN,WAAW;IACX,UAAU;IACV,MAAM;IACN,UAAU;CACF,CAAC;AAEX,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,IAAmB,EAAE,IAAmB;IACjE,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC"} | ||
| {"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkCH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAyDrG,mEAAmE;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AA0BxC,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,MAAM;IACN,MAAM;IACN,WAAW;IACX,UAAU;IACV,MAAM;IACN,UAAU;CACF,CAAC;AAEX,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,IAAmB,EAAE,IAAmB;IACjE,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC"} |
+1
-1
| { | ||
| "name": "@ayo-dev/core", | ||
| "version": "0.1.6", | ||
| "version": "0.2.0", | ||
| "description": "Shared message schema, wire protocol, and types for Ayo.", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
39661
45.3%597
44.9%