@cursor/july 0.1.80 → 0.1.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/AGENTS.md +0 -12
  2. package/dist/channels/github/cursor-account.d.ts +11 -0
  3. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  4. package/dist/channels/github/cursor-account.js +13 -0
  5. package/dist/channels/github/github-channel.d.ts.map +1 -1
  6. package/dist/channels/github/github-channel.js +29 -1
  7. package/dist/channels/github/types.d.ts +8 -0
  8. package/dist/channels/github/types.d.ts.map +1 -1
  9. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  10. package/dist/channels/origin/origin-channel.js +32 -10
  11. package/dist/channels/origin/types.d.ts +7 -0
  12. package/dist/channels/origin/types.d.ts.map +1 -1
  13. package/dist/channels/slack/cursor-account.d.ts.map +1 -1
  14. package/dist/channels/slack/cursor-account.js +2 -2
  15. package/dist/channels/slack/dispatch.d.ts +3 -0
  16. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  17. package/dist/channels/slack/dispatch.js +18 -18
  18. package/dist/channels/slack/interactive.d.ts +2 -0
  19. package/dist/channels/slack/interactive.d.ts.map +1 -1
  20. package/dist/channels/slack/interactive.js +4 -16
  21. package/dist/channels/slack/slack-channel.d.ts +1 -1
  22. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  23. package/dist/channels/slack/slack-channel.js +21 -10
  24. package/dist/channels/slack/types.d.ts +7 -0
  25. package/dist/channels/slack/types.d.ts.map +1 -1
  26. package/dist/channels.d.ts.map +1 -1
  27. package/dist/channels.js +4 -0
  28. package/dist/continuation.d.ts +20 -0
  29. package/dist/continuation.d.ts.map +1 -0
  30. package/dist/continuation.js +18 -0
  31. package/dist/docs/404.html +1 -1
  32. package/dist/docs/ab.html +2 -2
  33. package/dist/docs/assets/{app.e4_wtjUS.js → app.BEHVaPKt.js} +1 -1
  34. package/dist/docs/assets/chunks/{@localSearchIndexroot.BGiMJpnL.js → @localSearchIndexroot.Vvio4stV.js} +1 -1
  35. package/dist/docs/assets/chunks/{VPLocalSearchBox.DbdzyEie.js → VPLocalSearchBox.D2-5PKih.js} +1 -1
  36. package/dist/docs/assets/chunks/{theme.D8HpLrLK.js → theme.uNqJ4MUO.js} +2 -2
  37. package/dist/docs/building-with-agents.html +2 -2
  38. package/dist/docs/concepts.html +2 -2
  39. package/dist/docs/deployment.html +2 -2
  40. package/dist/docs/evals.html +2 -2
  41. package/dist/docs/example-agents/approval-buddy.html +2 -2
  42. package/dist/docs/example-agents/benny.html +2 -2
  43. package/dist/docs/example-agents/bugbot.html +2 -2
  44. package/dist/docs/example-agents/codebase-wiki.html +2 -2
  45. package/dist/docs/example-agents/codeowners-review.html +2 -2
  46. package/dist/docs/example-agents/concierge.html +2 -2
  47. package/dist/docs/example-agents/fsd.html +2 -2
  48. package/dist/docs/example-agents/index.html +2 -2
  49. package/dist/docs/example-agents/knowledge-base.html +2 -2
  50. package/dist/docs/example-agents/oncall.html +2 -2
  51. package/dist/docs/example-agents/security-reviewer.html +2 -2
  52. package/dist/docs/example-agents/slack-agent.html +2 -2
  53. package/dist/docs/example-agents/weather-agent.html +2 -2
  54. package/dist/docs/guides/agent-to-agent.html +2 -2
  55. package/dist/docs/guides/cloud-runtime.html +2 -2
  56. package/dist/docs/guides/convert-automation.html +2 -2
  57. package/dist/docs/guides/github.html +2 -2
  58. package/dist/docs/guides/human-in-the-loop.html +2 -2
  59. package/dist/docs/guides/mcp-oauth.html +2 -2
  60. package/dist/docs/guides/opentelemetry.html +2 -2
  61. package/dist/docs/guides/slack.html +2 -2
  62. package/dist/docs/guides/webhooks.html +2 -2
  63. package/dist/docs/hillclimbing.html +2 -2
  64. package/dist/docs/index.html +2 -2
  65. package/dist/docs/quickstart.html +2 -2
  66. package/dist/docs/reference/agent-config.html +2 -2
  67. package/dist/docs/reference/artifacts.html +2 -2
  68. package/dist/docs/reference/channels.html +2 -2
  69. package/dist/docs/reference/cli.html +2 -2
  70. package/dist/docs/reference/connections.html +2 -2
  71. package/dist/docs/reference/hooks.html +2 -2
  72. package/dist/docs/reference/http-api.html +2 -2
  73. package/dist/docs/reference/instructions.html +2 -2
  74. package/dist/docs/reference/playground.html +2 -2
  75. package/dist/docs/reference/project-layout.html +2 -2
  76. package/dist/docs/reference/prompt.html +2 -2
  77. package/dist/docs/reference/schedules.html +2 -2
  78. package/dist/docs/reference/sessions.html +2 -2
  79. package/dist/docs/reference/skills.html +2 -2
  80. package/dist/docs/reference/subagents.html +2 -2
  81. package/dist/docs/reference/tools.html +2 -2
  82. package/dist/docs/scaffolding-agents.html +2 -2
  83. package/dist/docs/storage.html +2 -2
  84. package/dist/docs/templates/agentic-owners.html +2 -2
  85. package/dist/docs/templates/demo.html +2 -2
  86. package/dist/docs/templates/pr-autofixer.html +2 -2
  87. package/dist/docs/templates/security-reviewer.html +2 -2
  88. package/dist/docs/templates/triage.html +2 -2
  89. package/dist/docs/troubleshooting.html +2 -2
  90. package/dist/files.d.ts +9 -3
  91. package/dist/files.d.ts.map +1 -1
  92. package/dist/files.js +9 -3
  93. package/dist/index.d.ts +5 -1
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +4 -1
  96. package/dist/internal/continuation-channel.d.ts +29 -0
  97. package/dist/internal/continuation-channel.d.ts.map +1 -0
  98. package/dist/internal/continuation-channel.js +88 -0
  99. package/dist/internal/continuation-identity.d.ts +95 -0
  100. package/dist/internal/continuation-identity.d.ts.map +1 -0
  101. package/dist/internal/continuation-identity.js +445 -0
  102. package/dist/internal/deploy-manifest.d.ts +12 -2
  103. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  104. package/dist/internal/deploy-manifest.js +15 -7
  105. package/dist/internal/discovery.d.ts.map +1 -1
  106. package/dist/internal/discovery.js +32 -5
  107. package/dist/internal/server.d.ts.map +1 -1
  108. package/dist/internal/server.js +18 -8
  109. package/dist/internal/session-engine.d.ts +24 -0
  110. package/dist/internal/session-engine.d.ts.map +1 -1
  111. package/dist/internal/session-engine.js +104 -34
  112. package/dist/internal/session-store.d.ts.map +1 -1
  113. package/dist/internal/session-store.js +6 -0
  114. package/dist/internal/skills-sync.d.ts +25 -0
  115. package/dist/internal/skills-sync.d.ts.map +1 -0
  116. package/dist/internal/skills-sync.js +96 -0
  117. package/dist/playground/assets/{index-DJzcIeGt.css → index-ChETdG-_.css} +1 -1
  118. package/dist/playground/assets/{index-K3Sxyx0I.js → index-CkuIrhg4.js} +3 -3
  119. package/dist/playground/index.html +2 -2
  120. package/dist/types.d.ts +44 -0
  121. package/dist/types.d.ts.map +1 -1
  122. package/package.json +1 -1
  123. package/src/channels/github/cursor-account.ts +20 -0
  124. package/src/channels/github/github-channel.ts +52 -1
  125. package/src/channels/github/types.ts +8 -0
  126. package/src/channels/origin/origin-channel.ts +48 -10
  127. package/src/channels/origin/types.ts +7 -0
  128. package/src/channels/slack/cursor-account.ts +1 -0
  129. package/src/channels/slack/dispatch.ts +44 -2
  130. package/src/channels/slack/interactive.ts +5 -0
  131. package/src/channels/slack/slack-channel.ts +23 -2
  132. package/src/channels/slack/types.ts +7 -0
  133. package/src/channels.ts +7 -0
  134. package/src/continuation.ts +49 -0
  135. package/src/files.ts +10 -3
  136. package/src/index.ts +30 -1
  137. package/src/internal/continuation-channel.ts +129 -0
  138. package/src/internal/continuation-identity.ts +597 -0
  139. package/src/internal/deploy-manifest.ts +36 -3
  140. package/src/internal/discovery.ts +40 -2
  141. package/src/internal/server.ts +23 -9
  142. package/src/internal/session-engine.ts +132 -37
  143. package/src/internal/session-store.ts +6 -0
  144. package/src/internal/skills-sync.ts +107 -0
  145. package/src/types.ts +55 -0
package/dist/files.js CHANGED
@@ -49,14 +49,20 @@ export const fileKeys = {
49
49
  };
50
50
  /**
51
51
  * Framework-owned keys for state that lives on the deployment's Agent Store
52
- * but is not author `host.files` data: artifact rows and payloads, and the
53
- * cross-session memory journal. Kept out of `files/` so author listings never
54
- * see framework rows.
52
+ * but is not author `host.files` data: artifact rows and payloads, authored
53
+ * skills synced for cloud turns, and the cross-session memory journal. Kept
54
+ * out of `files/` so author listings never see framework rows.
55
+ *
56
+ * Skills sit at store-root `skills/<name>/…` so exec-daemon's
57
+ * `--agent-store-skills-dir` walk finds them the same way it finds user-store
58
+ * skills. Memory and artifacts stay under {@link STORAGE_KEY_ROOT}.
55
59
  */
56
60
  export const agentStoreKeys = {
57
61
  artifactRow: (agent, id) => `${STORAGE_KEY_ROOT}/${agent}/artifacts/rows/${encodeURIComponent(id)}.json`,
58
62
  artifactRowPrefix: (agent) => `${STORAGE_KEY_ROOT}/${agent}/artifacts/rows/`,
59
63
  artifactContent: (agent, id) => `${STORAGE_KEY_ROOT}/${agent}/artifacts/content/${encodeURIComponent(id)}`,
64
+ skillFile: (skillName, relPath) => `skills/${skillName}/${relPath}`,
65
+ skillsPrefix: () => "skills/",
60
66
  memoryDir: (agent) => `${STORAGE_KEY_ROOT}/${agent}/memory`,
61
67
  memoryJournal: (agent) => `${STORAGE_KEY_ROOT}/${agent}/memory/journal.jsonl`,
62
68
  memoryJournalRotated: (agent, stamp) => `${STORAGE_KEY_ROOT}/${agent}/memory/journal-${stamp}.jsonl`,
package/dist/index.d.ts CHANGED
@@ -18,6 +18,8 @@ export { defineAB } from "./ab.js";
18
18
  export { defineArtifacts } from "./artifacts.js";
19
19
  export { allowAll, bearerAuth, DELETE, defineChannel, GET, httpChannel, localDev, localDevStrict, loopbackGitHubDev, loopbackOnly, PATCH, POST, PUT, publicEndpoint, } from "./channels.js";
20
20
  export { defineConnection } from "./connections.js";
21
+ export type { ContinuationBuiltin, ContinuationClaim, ContinuationIdentity, ContinuationSelector, ConversationType, MailboxContinuation, ParsedContinuation, } from "./continuation.js";
22
+ export { BUILTINS, bindMailboxContinuationSend, CONTINUATION_SELECTORS, continuationSource, defaultContinuationSelector, extractContinuation, formatConversationKey, handshakeContinuation, isContinuationSelector, mintClaim, normalizeIdentity, parseContinuationSelector, resolveContinuation, resolveV2Key, stampMailboxContinuation, V2EngineError, } from "./continuation.js";
21
23
  export { defineHook } from "./hooks.js";
22
24
  export type { LoadAgentProjectOptions } from "./internal/discovery.js";
23
25
  export { formatDiagnostics, hasErrorDiagnostics, isAgentProjectDir, loadAgentProject, loadAgentProjects, projectInfo, resolveAgentMounts, } from "./internal/discovery.js";
@@ -44,7 +46,9 @@ export type * from "./types.js";
44
46
  export { cursorAccountServersHasMixedWildcard, DEFAULT_MODEL, DIRECT_TOOL_CALL_CHANNEL_ID, isCursorAccountTransport, isPeerConnectionTransport, isSymbolicConnectionTransport, MAX_RUNNING_TURNS_LIMIT, normalizeCursorAccountServers, supportsKvCas, } from "./types.js";
45
47
  /**
46
48
  * Runtime config for an agent — authored at `agent/agent.ts` (the root
47
- * agent) or `agent/subagents/<id>/agent.ts` (a subagent).
49
+ * agent) or `agent/subagents/<id>/agent.ts` (a subagent). Set
50
+ * `architecture: "v2"` to deploy onto the v2 control plane; omitted
51
+ * channel continuation then inherits kind `/v2` defaults.
48
52
  */
49
53
  export declare function defineAgent(config: AgentConfig): AgentConfigDefinition;
50
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -42,6 +42,7 @@ export { defineArtifacts } from "./artifacts.js";
42
42
  // Authoring helpers (also available on their focused subpath exports).
43
43
  export { allowAll, bearerAuth, DELETE, defineChannel, GET, httpChannel, localDev, localDevStrict, loopbackGitHubDev, loopbackOnly, PATCH, POST, PUT, publicEndpoint, } from "./channels.js";
44
44
  export { defineConnection } from "./connections.js";
45
+ export { BUILTINS, bindMailboxContinuationSend, CONTINUATION_SELECTORS, continuationSource, defaultContinuationSelector, extractContinuation, formatConversationKey, handshakeContinuation, isContinuationSelector, mintClaim, normalizeIdentity, parseContinuationSelector, resolveContinuation, resolveV2Key, stampMailboxContinuation, V2EngineError, } from "./continuation.js";
45
46
  export { defineHook } from "./hooks.js";
46
47
  export { formatDiagnostics, hasErrorDiagnostics, isAgentProjectDir, loadAgentProject, loadAgentProjects, projectInfo, resolveAgentMounts, } from "./internal/discovery.js";
47
48
  export { collectGitHubTriggerTargets, collectOriginTriggerTargets, handleAgentServeTrigger, } from "./internal/handleAgentServeTrigger.js";
@@ -59,7 +60,9 @@ export { defineTool } from "./tools.js";
59
60
  export { cursorAccountServersHasMixedWildcard, DEFAULT_MODEL, DIRECT_TOOL_CALL_CHANNEL_ID, isCursorAccountTransport, isPeerConnectionTransport, isSymbolicConnectionTransport, MAX_RUNNING_TURNS_LIMIT, normalizeCursorAccountServers, supportsKvCas, } from "./types.js";
60
61
  /**
61
62
  * Runtime config for an agent — authored at `agent/agent.ts` (the root
62
- * agent) or `agent/subagents/<id>/agent.ts` (a subagent).
63
+ * agent) or `agent/subagents/<id>/agent.ts` (a subagent). Set
64
+ * `architecture: "v2"` to deploy onto the v2 control plane; omitted
65
+ * channel continuation then inherits kind `/v2` defaults.
63
66
  */
64
67
  export function defineAgent(config) {
65
68
  return brandDefinition("agent", config);
@@ -0,0 +1,29 @@
1
+ import type { AgentArchitecture, ChannelDefinition, HttpChannelDefinition } from "../types.js";
2
+ import { type ContinuationIdentity } from "./continuation-identity.js";
3
+ export declare function channelContinuationIdentity(definition: object | undefined): ContinuationIdentity;
4
+ export declare function httpContinuationIdentity(httpChannel: HttpChannelDefinition | undefined): ContinuationIdentity;
5
+ /**
6
+ * Stamp `/v2` continuation defaults onto channel constructors that omitted
7
+ * `continuation` when the agent deploys onto v2 architecture. GitHub/Origin
8
+ * type (`pr` / `issue` / `none`) follows declared webhook events. Explicit
9
+ * per-channel selectors are left alone. Idempotent.
10
+ */
11
+ export declare function applyAgentContinuationDefaults(project: {
12
+ agent: {
13
+ architecture?: AgentArchitecture;
14
+ };
15
+ channels: ReadonlyArray<{
16
+ definition: object;
17
+ }>;
18
+ httpChannel: HttpChannelDefinition;
19
+ }): void;
20
+ export declare function handshakeChannelContinuation(input: {
21
+ id: string;
22
+ definition: ChannelDefinition;
23
+ }): {
24
+ ok: true;
25
+ } | {
26
+ ok: false;
27
+ error: string;
28
+ };
29
+ //# sourceMappingURL=continuation-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-channel.d.ts","sourceRoot":"","sources":["../../src/internal/continuation-channel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,oBAAoB,EAK1B,MAAM,4BAA4B,CAAC;AAEpC,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,oBAAoB,CAiBtB;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,qBAAqB,GAAG,SAAS,GAC7C,oBAAoB,CAEtB;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE;IACtD,KAAK,EAAE;QAAE,YAAY,CAAC,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,aAAa,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,WAAW,EAAE,qBAAqB,CAAC;CACpC,GAAG,IAAI,CAaP;AA4CD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,iBAAiB,CAAC;CAC/B,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAe9C"}
@@ -0,0 +1,88 @@
1
+ import { getGitHubChannelOptions } from "../channels/github/github-channel.js";
2
+ import { getOriginChannelOptions } from "../channels/origin/origin-channel.js";
3
+ import { getSlackChannelOptions } from "../channels/slack/slack-channel.js";
4
+ import { defaultContinuationSelector, handshakeContinuation, normalizeIdentity, } from "./continuation-identity.js";
5
+ export function channelContinuationIdentity(definition) {
6
+ if (definition === undefined) {
7
+ return defaultContinuationSelector();
8
+ }
9
+ const github = getGitHubChannelOptions(definition);
10
+ if (github !== undefined) {
11
+ return normalizeIdentity(github.continuation, "github");
12
+ }
13
+ const slack = getSlackChannelOptions(definition);
14
+ if (slack !== undefined) {
15
+ return normalizeIdentity(slack.continuation, "slack");
16
+ }
17
+ const origin = getOriginChannelOptions(definition);
18
+ if (origin !== undefined) {
19
+ return normalizeIdentity(origin.continuation, "origin");
20
+ }
21
+ return defaultContinuationSelector();
22
+ }
23
+ export function httpContinuationIdentity(httpChannel) {
24
+ return normalizeIdentity(httpChannel === null || httpChannel === void 0 ? void 0 : httpChannel.continuation, "http");
25
+ }
26
+ /**
27
+ * Stamp `/v2` continuation defaults onto channel constructors that omitted
28
+ * `continuation` when the agent deploys onto v2 architecture. GitHub/Origin
29
+ * type (`pr` / `issue` / `none`) follows declared webhook events. Explicit
30
+ * per-channel selectors are left alone. Idempotent.
31
+ */
32
+ export function applyAgentContinuationDefaults(project) {
33
+ if (project.agent.architecture !== "v2") {
34
+ return;
35
+ }
36
+ for (const channel of project.channels) {
37
+ stampOmittedChannelContinuation(channel.definition, "v2");
38
+ }
39
+ if (project.httpChannel.continuation === undefined) {
40
+ project.httpChannel.continuation = defaultContinuationSelector("http", "v2");
41
+ }
42
+ }
43
+ function stampOmittedChannelContinuation(definition, version) {
44
+ const events = declaredChannelEventTypes(definition);
45
+ const github = getGitHubChannelOptions(definition);
46
+ if (github !== undefined) {
47
+ if (github.continuation === undefined) {
48
+ github.continuation = defaultContinuationSelector("github", version, events);
49
+ }
50
+ return;
51
+ }
52
+ const slack = getSlackChannelOptions(definition);
53
+ if (slack !== undefined) {
54
+ if (slack.continuation === undefined) {
55
+ slack.continuation = defaultContinuationSelector("slack", version);
56
+ }
57
+ return;
58
+ }
59
+ const origin = getOriginChannelOptions(definition);
60
+ if (origin !== undefined) {
61
+ if (origin.continuation === undefined) {
62
+ origin.continuation = defaultContinuationSelector("origin", version, events);
63
+ }
64
+ }
65
+ }
66
+ function declaredChannelEventTypes(definition) {
67
+ var _a;
68
+ const meta = definition.meta;
69
+ return (_a = meta === null || meta === void 0 ? void 0 : meta.githubWebhookEvents) !== null && _a !== void 0 ? _a : meta === null || meta === void 0 ? void 0 : meta.originWebhookEvents;
70
+ }
71
+ export function handshakeChannelContinuation(input) {
72
+ var _a, _b, _c;
73
+ var _d, _e;
74
+ const kind = (_a = input.definition.meta) === null || _a === void 0 ? void 0 : _a.kind;
75
+ const eventTypes = [
76
+ ...((_d = (_b = input.definition.meta) === null || _b === void 0 ? void 0 : _b.githubWebhookEvents) !== null && _d !== void 0 ? _d : []),
77
+ ...((_e = (_c = input.definition.meta) === null || _c === void 0 ? void 0 : _c.originWebhookEvents) !== null && _e !== void 0 ? _e : []),
78
+ ];
79
+ const result = handshakeContinuation({
80
+ kind,
81
+ eventTypes,
82
+ identity: channelContinuationIdentity(input.definition),
83
+ });
84
+ if (!result.ok) {
85
+ return { ok: false, error: `channel ${input.id}: ${result.error}` };
86
+ }
87
+ return result;
88
+ }
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Continuation identity is a closed selector string. Omitted `continuation`
3
+ * on a channel constructor stays `/v1` (engine pack minting) so existing
4
+ * agents do not change: `githubChannel()` → `github.pr/v1`, `slackChannel()`
5
+ * → `slack.thread/v1`, `originChannel()` → `origin.pr/v1`, `httpChannel()`
6
+ * → `none/v1`.
7
+ *
8
+ * Opt the whole agent into the v2 control plane with
9
+ * `defineAgent({ architecture: "v2" })`. That stamps `/v2` defaults from
10
+ * the channel kind and declared events (`github.pr/v2`, `github.issue/v2`,
11
+ * `github.none/v2`, `slack.thread/v2`, …) onto every channel that omitted
12
+ * a selector. An explicit per-channel selector still overrides. JSONPath
13
+ * and per-agent format strings are rejected.
14
+ */
15
+ export type ConversationType = "pr" | "issue" | "thread" | "origin-pr";
16
+ export declare const CONTINUATION_SELECTORS: readonly ["github.pr/v1", "github.pr/v2", "github.issue/v1", "github.issue/v2", "github.none/v2", "slack.thread/v1", "slack.thread/v2", "slack.none/v2", "origin.pr/v1", "origin.pr/v2", "origin.none/v2", "none/v1", "none/v2"];
17
+ export type ContinuationSelector = (typeof CONTINUATION_SELECTORS)[number];
18
+ export type ContinuationIdentity = ContinuationSelector;
19
+ /** Agent-root protocol version. Omit / `"v1"` keeps engine minting. */
20
+ export type ContinuationProtocolVersion = "v1" | "v2";
21
+ export type ParsedContinuation = {
22
+ selector: ContinuationSelector;
23
+ version: 1 | 2;
24
+ type: ConversationType | "none";
25
+ kind: "github" | "slack" | "origin" | "http";
26
+ };
27
+ export type ContinuationClaim = {
28
+ type: ConversationType;
29
+ resource: {
30
+ owner: string;
31
+ repo: string;
32
+ number: number;
33
+ } | {
34
+ channelId: string;
35
+ threadTs: string;
36
+ } | {
37
+ fullName: string;
38
+ number: number;
39
+ };
40
+ };
41
+ export type MailboxContinuation = {
42
+ key: string;
43
+ };
44
+ export type ContinuationBuiltin = {
45
+ type: ConversationType;
46
+ kind: "github" | "slack" | "origin";
47
+ events: readonly string[];
48
+ format: string;
49
+ };
50
+ export declare const BUILTINS: readonly ContinuationBuiltin[];
51
+ export declare class V2EngineError extends Error {
52
+ constructor(message: string);
53
+ }
54
+ export declare function isContinuationSelector(value: string): value is ContinuationSelector;
55
+ export declare function defaultContinuationSelector(kind?: string, version?: ContinuationProtocolVersion, eventTypes?: readonly string[]): ContinuationSelector;
56
+ export declare function parseContinuationSelector(selector: string): ParsedContinuation | undefined;
57
+ export declare function resolveContinuation(raw?: ContinuationIdentity, kind?: string): ParsedContinuation;
58
+ export declare function normalizeIdentity(raw?: ContinuationIdentity, kind?: string): ContinuationIdentity;
59
+ export declare function continuationSource(identity?: ContinuationIdentity, kind?: string): "engine" | "control-plane";
60
+ export declare function isV2DurableContinuationKey(key: string): boolean;
61
+ export declare function newEvtKey(): string;
62
+ export declare function builtinForType(type: ConversationType): ContinuationBuiltin | undefined;
63
+ export declare function formatConversationKey(type: ConversationType, fields: {
64
+ fullName?: string;
65
+ number?: number;
66
+ channelId?: string;
67
+ threadTs?: string;
68
+ }): string;
69
+ export declare function mintClaim(claim: ContinuationClaim): string;
70
+ export declare function handshakeContinuation(input: {
71
+ kind?: string;
72
+ eventTypes?: readonly string[];
73
+ identity?: ContinuationIdentity;
74
+ }): {
75
+ ok: true;
76
+ } | {
77
+ ok: false;
78
+ error: string;
79
+ };
80
+ /**
81
+ * CP/pack extract. Returns a `cont:` key when the payload binds the
82
+ * identity type; undefined on membership miss or missing number (caller
83
+ * stamps `evt:` and does not join the conversation index).
84
+ */
85
+ export declare function extractContinuation(type: ConversationType, eventName: string, payload: unknown): string | undefined;
86
+ export declare function stampMailboxContinuation(identity: ContinuationIdentity, eventName: string, payload: unknown, kind?: string): MailboxContinuation;
87
+ export declare function resolveV2Key(identity: ContinuationIdentity, options: {
88
+ claim?: ContinuationClaim;
89
+ continuationToken?: string;
90
+ mailboxContinuation?: MailboxContinuation;
91
+ }, kind?: string): string;
92
+ export declare function bindMailboxContinuationSend<TSession, TOptions extends {
93
+ mailboxContinuation?: MailboxContinuation;
94
+ }>(send: (message: string, options?: TOptions) => Promise<TSession>, mailbox: MailboxContinuation | undefined): (message: string, options?: TOptions) => Promise<TSession>;
95
+ //# sourceMappingURL=continuation-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-identity.d.ts","sourceRoot":"","sources":["../../src/internal/continuation-identity.ts"],"names":[],"mappings":"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"}