@inneranimalmedia/agentsam-sdk 2.6.3 → 2.6.4

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 (233) hide show
  1. package/AGENTSAM.md +6 -0
  2. package/README.md +16 -1
  3. package/bin/agentsam +16 -1
  4. package/docs/BRAND_INTELLIGENCE.md +1 -1
  5. package/docs/architecture/AGENTSAM_DISTRIBUTION_OWNERSHIP.md +176 -0
  6. package/docs/architecture/AGENTSAM_GO_RUNTIME.md +282 -0
  7. package/docs/architecture/CODEBASEINDEX_GUIDED_PATH.md +202 -0
  8. package/docs/architecture/FS_E2E_CLOSURE_RECEIPT.md +59 -0
  9. package/docs/architecture/LOCAL_FS_AUTHORITY.md +38 -0
  10. package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +28 -0
  11. package/docs/architecture/PLAN_CLI_AND_LOCAL_STUDIO_DESKTOP.md +96 -0
  12. package/docs/architecture/SAM_ACTIVITY_RECOVERY_RECEIPT.md +39 -0
  13. package/docs/architecture/SAM_DECISION_WORK_RECEIPT.md +54 -0
  14. package/docs/architecture/SAM_KERNEL.md +181 -0
  15. package/docs/architecture/SAM_MACHINE_NORMALIZATION_PRECOMMIT_REPORT.md +208 -0
  16. package/docs/architecture/SLASH_SKILLS_PORTABLE.md +116 -0
  17. package/docs/architecture/fs-e2e-receipt.latest.json +42 -0
  18. package/docs/architecture/previews/codebaseindex-guided-path/CODEBASEINDEX_GUIDED_PATH.md +202 -0
  19. package/docs/architecture/previews/codebaseindex-guided-path/index.html +321 -0
  20. package/migrations/d1/0010_portable_tickets_memory.sql +140 -0
  21. package/migrations/d1/0011_agentsam_skill_v2.sql +185 -0
  22. package/migrations/d1/0011b_agentsam_skill_v2_cutover.sql +22 -0
  23. package/migrations/d1/0011c_agentsam_skill_v2_backfill.sql +76 -0
  24. package/migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql +50 -0
  25. package/migrations/d1/0012_agentsam_tools_required_seed.sql +67 -0
  26. package/migrations/d1/0013_identity_oauth_states.sql +15 -0
  27. package/migrations/d1/0014_auth_event_log.sql +20 -0
  28. package/migrations/d1/0015_identity_oauth_state_app_id.sql +3 -0
  29. package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +16 -0
  30. package/migrations/sqlite/agentsam_skill_retrieval.portable.sql +42 -0
  31. package/package.json +19 -4
  32. package/packages/agentsam-contracts/src/errors.ts +16 -0
  33. package/packages/agentsam-errors/src/envelope.js +53 -0
  34. package/packages/agentsam-errors/src/index.js +1 -0
  35. package/packages/agentsam-errors/src/recovery.js +301 -0
  36. package/packages/agentsam-knowledge/src/providers/index.js +18 -6
  37. package/packages/connectors/cloudflare/src/routes.js +9 -0
  38. package/packages/connectors/cloudflare/tests/connector.test.mjs +26 -1
  39. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  40. package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +11 -2
  41. package/packages/identity/docs/PORTABLE_IDENTITY_ARCHITECTURE.md +50 -0
  42. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +31 -0
  43. package/packages/identity/migrations/sqlite/001_identity_core.sql +99 -0
  44. package/packages/identity/migrations/sqlite/002_identity_oauth_client.sql +38 -0
  45. package/packages/identity/migrations/sqlite/003_identity_oauth_server.sql +64 -0
  46. package/packages/identity/package.json +2 -2
  47. package/packages/identity/src/adapters/cloudflare-d1/index.js +122 -22
  48. package/packages/identity/src/adapters/sqlite/index.js +319 -0
  49. package/packages/identity/src/app/verify-app.js +95 -0
  50. package/packages/identity/src/contracts/identity-store.js +115 -0
  51. package/packages/identity/src/contracts/route-ids.js +30 -0
  52. package/packages/identity/src/contracts/route-projection.js +218 -0
  53. package/packages/identity/src/contracts/routes.js +11 -0
  54. package/packages/identity/src/core/browser-paths.js +4 -5
  55. package/packages/identity/src/core/constants.js +13 -8
  56. package/packages/identity/src/core/session-policy.js +32 -0
  57. package/packages/identity/src/frontend/auth-portal/pages/login.html +10 -10
  58. package/packages/identity/src/frontend/auth-portal/pages/reset.html +3 -3
  59. package/packages/identity/src/frontend/auth-portal/pages/signup.html +3 -3
  60. package/packages/identity/src/frontend/auth-portal/preview/dashboard-stub.html +1 -1
  61. package/packages/identity/src/index.js +25 -0
  62. package/packages/identity/src/oauth/README.md +10 -4
  63. package/packages/identity/src/oauth/credentials.js +20 -13
  64. package/packages/identity/src/oauth/finalize-inbound.js +1 -1
  65. package/packages/identity/src/oauth/iam-platform.js +8 -7
  66. package/packages/identity/src/oauth/redirect-paths.js +27 -36
  67. package/packages/identity/src/server/identity-service.js +30 -13
  68. package/packages/identity/src/server/mount-policy.js +30 -0
  69. package/packages/identity/src/server/post-auth.js +79 -0
  70. package/packages/identity/src/server/worker-router.js +104 -72
  71. package/packages/identity/tests/finalize-inbound-oauth.test.mjs +6 -6
  72. package/packages/identity/tests/iam-provider.test.mjs +1 -1
  73. package/packages/identity/tests/identity-service.test.mjs +36 -5
  74. package/packages/identity/tests/oauth-credentials.test.mjs +3 -1
  75. package/packages/identity/tests/portable-identity-architecture.test.mjs +157 -0
  76. package/packages/identity/tests/session-routes-policy.test.mjs +21 -0
  77. package/packages/theme-church-site/package.json +2 -1
  78. package/packages/theme-church-site/src/index.js +1 -0
  79. package/packages/theme-companions-site/package.json +2 -1
  80. package/packages/theme-companions-site/src/index.js +1 -0
  81. package/packages/theme-floors-site/package.json +2 -1
  82. package/packages/theme-floors-site/src/index.js +1 -0
  83. package/packages/theme-fuelnfree-site/package.json +2 -1
  84. package/packages/theme-fuelnfree-site/src/index.js +1 -0
  85. package/packages/theme-handyman-site/package.json +2 -1
  86. package/packages/theme-handyman-site/src/index.js +1 -0
  87. package/packages/theme-insurance-site/package.json +2 -1
  88. package/packages/theme-insurance-site/src/index.js +1 -0
  89. package/packages/theme-shinshu-site/package.json +2 -1
  90. package/packages/theme-shinshu-site/src/index.js +1 -0
  91. package/protocol/apps/agentsam.app.v1.schema.json +51 -0
  92. package/protocol/brand/brandpack.v1.schema.json +43 -0
  93. package/protocol/credentials/issue.v1.schema.json +38 -0
  94. package/protocol/database/connection.v1.schema.json +41 -0
  95. package/protocol/embeddings/embedding-profile.v1.schema.json +20 -0
  96. package/protocol/errors/error-envelope.schema.json +135 -1
  97. package/protocol/errors/recovery.v1.schema.json +50 -0
  98. package/protocol/runtime/workspace-fs.v1.schema.json +71 -0
  99. package/protocol/sam/activity.v1.schema.json +48 -0
  100. package/protocol/sam/answer.v1.schema.json +35 -0
  101. package/protocol/sam/calibration.v1.schema.json +21 -0
  102. package/protocol/sam/decision-receipt.v1.schema.json +29 -0
  103. package/protocol/sam/evaluation.v1.schema.json +19 -0
  104. package/protocol/sam/operation.schema.json +66 -0
  105. package/protocol/sam/outcome.v1.schema.json +36 -0
  106. package/protocol/sam/question.v1.schema.json +26 -0
  107. package/protocol/sam/registry.seed.json +153 -0
  108. package/protocol/sam/result.schema.json +53 -0
  109. package/protocol/sam/state.v1.schema.json +23 -0
  110. package/protocol/skills/agentsam.interaction.v1.schema.json +50 -0
  111. package/protocol/skills/agentsam.skill.v1.schema.json +57 -0
  112. package/protocol/ui/icon-registry.mjs +226 -0
  113. package/protocol/ui/icon.v1.schema.json +51 -0
  114. package/skills/README.md +22 -9
  115. package/skills/agentsam-codebaseindex/SKILL.md +225 -0
  116. package/skills/catalog.json +14 -0
  117. package/src/cli/command-catalog.js +130 -0
  118. package/src/cli/dispatch.js +48 -0
  119. package/src/cli.js +43 -1
  120. package/src/commands/api-key.js +244 -0
  121. package/src/commands/app.js +60 -28
  122. package/src/commands/brand.js +17 -19
  123. package/src/commands/codebaseindex.js +688 -0
  124. package/src/commands/env.js +152 -25
  125. package/src/commands/go.js +366 -53
  126. package/src/commands/interaction-clack.js +115 -0
  127. package/src/commands/models.js +1 -1
  128. package/src/commands/providers.js +62 -14
  129. package/src/commands/shell.js +43 -2
  130. package/src/commands/skill.js +248 -0
  131. package/src/commands/skills.js +1 -1
  132. package/src/commands/start-local.js +4 -0
  133. package/src/commands/whoami.js +90 -18
  134. package/src/go/build.js +229 -39
  135. package/src/go/cloudflare.js +506 -105
  136. package/src/go/container.js +120 -0
  137. package/src/go/contract.js +9 -4
  138. package/src/go/discover.js +149 -33
  139. package/src/go/index.js +15 -3
  140. package/src/go/native-probe-runner.mjs +119 -0
  141. package/src/go/{registry.js → official-registry.js} +64 -7
  142. package/src/go/official-release.js +10 -0
  143. package/src/go/receipts.js +77 -10
  144. package/src/go/verify.js +9 -2
  145. package/src/index.js +27 -0
  146. package/src/indexing/ingest/discover-models.js +298 -0
  147. package/src/indexing/ingest/inventory.js +243 -0
  148. package/src/indexing/ingest/job-graph.js +181 -0
  149. package/src/indexing/ingest/materials.js +210 -0
  150. package/src/lib/provider-credentials.js +63 -21
  151. package/src/lib/slash-commands.js +1 -0
  152. package/src/local-fs/capability.js +121 -0
  153. package/src/local-fs/freshness.js +75 -0
  154. package/src/local-fs/index.js +385 -0
  155. package/src/local-fs/paths.js +100 -0
  156. package/src/local-pty/server.js +295 -19
  157. package/src/mcp/client.js +2 -2
  158. package/src/models/ai-access-onboarding.js +112 -0
  159. package/src/models/discovery.js +10 -2
  160. package/src/models/inventory-core.js +9 -1
  161. package/src/sam/activity/index.js +183 -0
  162. package/src/sam/client.js +252 -0
  163. package/src/sam/decision/calibration.js +109 -0
  164. package/src/sam/decision/confidence.js +126 -0
  165. package/src/sam/decision/evaluate.js +157 -0
  166. package/src/sam/decision/evaluators/deterministic.js +341 -0
  167. package/src/sam/decision/evaluators/heuristic.js +61 -0
  168. package/src/sam/decision/evaluators/select.js +50 -0
  169. package/src/sam/decision/evaluators/semantic.js +149 -0
  170. package/src/sam/decision/hierarchical.js +61 -0
  171. package/src/sam/decision/index.js +53 -0
  172. package/src/sam/decision/policy.js +86 -0
  173. package/src/sam/decision/questions.js +120 -0
  174. package/src/sam/decision/receipt.js +148 -0
  175. package/src/sam/decision/state.js +117 -0
  176. package/src/sam/decision/types.js +22 -0
  177. package/src/sam/decision/validate.js +200 -0
  178. package/src/sam/define.js +51 -0
  179. package/src/sam/index.js +65 -0
  180. package/src/sam/operations/brand-scan.js +62 -0
  181. package/src/sam/operations/cad-blender-inspect.js +36 -0
  182. package/src/sam/operations/codebaseindex-ingest.js +49 -0
  183. package/src/sam/operations/decision-evaluate.js +59 -0
  184. package/src/sam/operations/planning-astar.js +77 -0
  185. package/src/sam/operations/planning-goap.js +60 -0
  186. package/src/sam/operations/repository-inspect.js +72 -0
  187. package/src/sam/operations/security-scan.js +33 -0
  188. package/src/sam/operations/terminal-exec.js +29 -0
  189. package/src/sam/planning/astar.js +311 -0
  190. package/src/sam/planning/goap.js +177 -0
  191. package/src/sam/planning/index.js +21 -0
  192. package/src/sam/planning/state.js +84 -0
  193. package/src/sam/registry.js +48 -0
  194. package/src/sam/result.js +77 -0
  195. package/src/sam/seed.js +44 -0
  196. package/src/sam/types.js +91 -0
  197. package/src/skills/catalog.js +64 -0
  198. package/src/skills/content-resolver.js +124 -0
  199. package/src/skills/hosted-store.js +37 -0
  200. package/src/skills/index.js +29 -64
  201. package/src/skills/interaction.js +102 -0
  202. package/src/skills/local-store.js +228 -0
  203. package/src/skills/manifest.js +104 -0
  204. package/src/skills/metrics.js +31 -0
  205. package/src/skills/registry.js +184 -0
  206. package/src/skills/runtime.js +287 -0
  207. package/src/skills/slash.js +44 -0
  208. package/src/ui/cli/help.js +94 -101
  209. package/test/cli/api-key-env-whoami.test.mjs +129 -0
  210. package/test/cli/codebaseindex-plan-ux.test.mjs +37 -0
  211. package/test/cli/go.test.mjs +62 -5
  212. package/test/cli/skill-npm-and-env.test.mjs +52 -0
  213. package/test/cli/wireframes-go-registry.test.mjs +87 -2
  214. package/test/go/build-source-identity.test.mjs +31 -0
  215. package/test/go/cloudflare-probe.test.mjs +274 -10
  216. package/test/go/distribution.test.mjs +28 -0
  217. package/test/integration/ai-access-onboarding.test.mjs +47 -0
  218. package/test/integration/cli-help.test.mjs +1 -1
  219. package/test/integration/cms-site-tenancy-contract.test.mjs +6 -6
  220. package/test/integration/codebaseindex-ingest.test.mjs +166 -0
  221. package/test/integration/icon-registry.test.mjs +67 -0
  222. package/test/integration/ingest-discover-models.test.mjs +30 -0
  223. package/test/integration/install-script.test.mjs +12 -9
  224. package/test/integration/local-fs.test.mjs +113 -0
  225. package/test/integration/provider-env-cli.test.mjs +2 -1
  226. package/test/integration/sam-activity-recovery.test.mjs +147 -0
  227. package/test/integration/sam-decision.test.mjs +584 -0
  228. package/test/integration/sam-kernel.test.mjs +99 -0
  229. package/test/integration/sam-planning-astar.test.mjs +279 -0
  230. package/test/integration/skill-runtime.test.mjs +240 -0
  231. package/test/integration/studio-fs-pty-e2e.test.mjs +294 -0
  232. package/test/models.test.mjs +14 -7
  233. package/test/shell.test.mjs +4 -4
@@ -0,0 +1,185 @@
1
+ -- 0011_agentsam_skill_v2.sql
2
+ -- Skill redesign: identity/config · metrics · retrieval (three tables).
3
+ -- Fresh installs: apply this file directly.
4
+ -- Production hosts with legacy agentsam_skill: use 0011b_agentsam_skill_v2_cutover.sql
5
+ --
6
+ -- Ownership: account_id only (no tenant_id / user_id / person_uuid / workspace_id / scope).
7
+ -- No FK to agentsam_account — that table is not present on IAM D1; account_id aligns with
8
+ -- accounts.id (au_*) when the row is account-owned.
9
+ --
10
+ -- Published npm lane: partial unique on slash_trigger WHERE is_published = 1
11
+ -- (two accounts cannot both publish the same /trigger).
12
+
13
+ CREATE TABLE IF NOT EXISTS agentsam_skill (
14
+ id TEXT PRIMARY KEY,
15
+ account_id TEXT NOT NULL,
16
+
17
+ name TEXT NOT NULL,
18
+ slash_trigger TEXT NOT NULL
19
+ CHECK (slash_trigger GLOB '/[a-z0-9][a-z0-9-]*'),
20
+
21
+ npm_package_name TEXT,
22
+ npm_version TEXT,
23
+ is_published INTEGER NOT NULL DEFAULT 0 CHECK (is_published IN (0,1)),
24
+
25
+ description TEXT NOT NULL DEFAULT '',
26
+ content_markdown TEXT NOT NULL DEFAULT '',
27
+ file_path TEXT NOT NULL DEFAULT '',
28
+ content_checksum TEXT NOT NULL DEFAULT '',
29
+
30
+ globs TEXT NOT NULL DEFAULT '[]',
31
+ always_apply INTEGER NOT NULL DEFAULT 0 CHECK (always_apply IN (0,1)),
32
+ task_types_json TEXT NOT NULL DEFAULT '[]',
33
+ route_keys_json TEXT NOT NULL DEFAULT '[]',
34
+
35
+ access_mode TEXT NOT NULL DEFAULT 'read_write'
36
+ CHECK (access_mode IN ('read_only','read_write')),
37
+
38
+ icon TEXT NOT NULL DEFAULT '',
39
+ tags_json TEXT NOT NULL DEFAULT '[]',
40
+ metadata_json TEXT NOT NULL DEFAULT '{}',
41
+
42
+ invocation_count INTEGER NOT NULL DEFAULT 0,
43
+ last_invoked_at TEXT,
44
+
45
+ version INTEGER NOT NULL DEFAULT 1,
46
+ is_active INTEGER NOT NULL DEFAULT 1 CHECK (is_active IN (0,1)),
47
+ sort_order INTEGER NOT NULL DEFAULT 0,
48
+
49
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
50
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
51
+
52
+ UNIQUE (account_id, slash_trigger),
53
+ UNIQUE (npm_package_name, npm_version)
54
+ );
55
+
56
+ CREATE INDEX IF NOT EXISTS idx_skill_account ON agentsam_skill(account_id);
57
+ CREATE INDEX IF NOT EXISTS idx_skill_active ON agentsam_skill(is_active) WHERE is_active = 1;
58
+ CREATE INDEX IF NOT EXISTS idx_skill_published ON agentsam_skill(is_published) WHERE is_published = 1;
59
+
60
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_skill_published_slash
61
+ ON agentsam_skill(slash_trigger) WHERE is_published = 1;
62
+
63
+ CREATE TABLE IF NOT EXISTS agentsam_skill_metrics (
64
+ skill_id TEXT PRIMARY KEY REFERENCES agentsam_skill(id) ON DELETE CASCADE,
65
+ byte_size INTEGER NOT NULL DEFAULT 0,
66
+ char_count INTEGER NOT NULL DEFAULT 0,
67
+ line_count INTEGER NOT NULL DEFAULT 0,
68
+ estimated_tokens INTEGER NOT NULL DEFAULT 0,
69
+ estimation_method TEXT NOT NULL DEFAULT 'chars_div_4'
70
+ CHECK (estimation_method IN ('chars_div_4','tiktoken_cl100k','tiktoken_o200k','provider_reported')),
71
+ computed_at TEXT NOT NULL DEFAULT (datetime('now'))
72
+ );
73
+
74
+ CREATE TABLE IF NOT EXISTS agentsam_skill_retrieval (
75
+ id TEXT PRIMARY KEY,
76
+ skill_id TEXT NOT NULL REFERENCES agentsam_skill(id) ON DELETE CASCADE,
77
+
78
+ provider TEXT NOT NULL CHECK (provider IN (
79
+ 'local_fs',
80
+ 'cloudflare_d1',
81
+ 'cloudflare_hyperdrive',
82
+ 'cloudflare_r2',
83
+ 'cloudflare_vectorize',
84
+ 'supabase_postgres',
85
+ 'supabase_vectorize'
86
+ )),
87
+ strategy TEXT NOT NULL CHECK (strategy IN (
88
+ 'relational',
89
+ 'object_store',
90
+ 'vector_index',
91
+ 'none'
92
+ )),
93
+
94
+ is_primary INTEGER NOT NULL DEFAULT 0 CHECK (is_primary IN (0,1)),
95
+
96
+ index_name TEXT,
97
+ namespace TEXT,
98
+ connection_ref TEXT,
99
+ embedding_model TEXT,
100
+ dimensions INTEGER,
101
+
102
+ config_json TEXT NOT NULL DEFAULT '{}',
103
+ last_synced_at TEXT,
104
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
105
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
106
+
107
+ UNIQUE (skill_id, provider, strategy)
108
+ );
109
+
110
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_skill_retrieval_primary
111
+ ON agentsam_skill_retrieval(skill_id) WHERE is_primary = 1;
112
+
113
+ CREATE INDEX IF NOT EXISTS idx_skill_retrieval_skill ON agentsam_skill_retrieval(skill_id);
114
+
115
+ CREATE TABLE IF NOT EXISTS agentsam_skill_revision (
116
+ id TEXT PRIMARY KEY DEFAULT ('skillrev_' || lower(hex(randomblob(8)))),
117
+ skill_id TEXT NOT NULL REFERENCES agentsam_skill(id) ON DELETE CASCADE,
118
+ content_markdown TEXT NOT NULL,
119
+ version INTEGER NOT NULL,
120
+ changed_by TEXT NOT NULL DEFAULT 'system',
121
+ change_note TEXT,
122
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
123
+ );
124
+
125
+ CREATE INDEX IF NOT EXISTS idx_skill_revision_skill_id ON agentsam_skill_revision(skill_id);
126
+ CREATE INDEX IF NOT EXISTS idx_skill_revision_version ON agentsam_skill_revision(skill_id, version);
127
+
128
+ CREATE TABLE IF NOT EXISTS agentsam_skill_invocation (
129
+ id TEXT PRIMARY KEY DEFAULT ('skillinv_' || lower(hex(randomblob(8)))),
130
+ skill_id TEXT NOT NULL REFERENCES agentsam_skill(id) ON DELETE CASCADE,
131
+ account_id TEXT NOT NULL,
132
+ repository_id TEXT,
133
+ conversation_id TEXT,
134
+ trigger_method TEXT NOT NULL DEFAULT 'slash'
135
+ CHECK (trigger_method IN ('slash','at','auto','api')),
136
+ input_summary TEXT,
137
+ success INTEGER NOT NULL DEFAULT 1,
138
+ error_message TEXT,
139
+ duration_ms INTEGER,
140
+ model_used TEXT,
141
+ tokens_in INTEGER DEFAULT 0,
142
+ tokens_out INTEGER DEFAULT 0,
143
+ cost_usd REAL DEFAULT 0.0,
144
+ invoked_at TEXT NOT NULL DEFAULT (datetime('now'))
145
+ );
146
+
147
+ CREATE INDEX IF NOT EXISTS idx_skill_invoc_skill_id ON agentsam_skill_invocation(skill_id);
148
+ CREATE INDEX IF NOT EXISTS idx_skill_invoc_account ON agentsam_skill_invocation(account_id);
149
+ CREATE INDEX IF NOT EXISTS idx_skill_invoc_invoked ON agentsam_skill_invocation(invoked_at);
150
+
151
+ -- updated_at bump (D1/SQLite)
152
+ -- Avoid recursion: only bump when the statement did not already set updated_at.
153
+ CREATE TRIGGER IF NOT EXISTS trg_skill_updated_at
154
+ AFTER UPDATE ON agentsam_skill
155
+ WHEN NEW.updated_at IS OLD.updated_at
156
+ BEGIN
157
+ UPDATE agentsam_skill SET updated_at = datetime('now') WHERE id = NEW.id;
158
+ END;
159
+
160
+ -- Auto metrics on insert/content change (chars/4 heuristic)
161
+ CREATE TRIGGER IF NOT EXISTS trg_skill_metrics_insert
162
+ AFTER INSERT ON agentsam_skill
163
+ BEGIN
164
+ INSERT INTO agentsam_skill_metrics (skill_id, byte_size, char_count, line_count, estimated_tokens)
165
+ VALUES (
166
+ NEW.id,
167
+ LENGTH(CAST(NEW.content_markdown AS BLOB)),
168
+ LENGTH(NEW.content_markdown),
169
+ LENGTH(NEW.content_markdown) - LENGTH(REPLACE(NEW.content_markdown, char(10), '')) + 1,
170
+ CAST(LENGTH(NEW.content_markdown) / 4.0 AS INTEGER)
171
+ );
172
+ END;
173
+
174
+ CREATE TRIGGER IF NOT EXISTS trg_skill_metrics_update
175
+ AFTER UPDATE OF content_markdown ON agentsam_skill
176
+ BEGIN
177
+ UPDATE agentsam_skill_metrics SET
178
+ byte_size = LENGTH(CAST(NEW.content_markdown AS BLOB)),
179
+ char_count = LENGTH(NEW.content_markdown),
180
+ line_count = LENGTH(NEW.content_markdown) - LENGTH(REPLACE(NEW.content_markdown, char(10), '')) + 1,
181
+ estimated_tokens = CAST(LENGTH(NEW.content_markdown) / 4.0 AS INTEGER),
182
+ estimation_method = 'chars_div_4',
183
+ computed_at = datetime('now')
184
+ WHERE skill_id = NEW.id;
185
+ END;
@@ -0,0 +1,22 @@
1
+ -- 0011b_agentsam_skill_v2_cutover.sql
2
+ -- ORCHESTRATION NOTES (do not run this whole file via wrangler --file on large DBs —
3
+ -- D1 import may D1_RESET_DO). Apply in steps:
4
+ --
5
+ -- 1) RENAME (one statement each):
6
+ -- ALTER TABLE agentsam_skill RENAME TO agentsam_skill_legacy;
7
+ -- ALTER TABLE agentsam_skill_revision RENAME TO agentsam_skill_revision_legacy;
8
+ -- ALTER TABLE agentsam_skill_invocation RENAME TO agentsam_skill_invocation_legacy;
9
+ -- 2) DDL: --file migrations/d1/0011_agentsam_skill_v2.sql
10
+ -- 3) Backfill skills: --file migrations/d1/0011c_agentsam_skill_v2_backfill.sql
11
+ -- 4) Retrieval+revisions: --file migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql
12
+ -- 5) Verify counts: skill == legacy == metrics == retrieval; revisions match legacy.
13
+ -- 6) Keep *_legacy until verified. Drop only after a bake period.
14
+ --
15
+ -- Applied remotely on inneranimalmedia-business 2026-09-25 (88 skills).
16
+ -- Notes:
17
+ -- - No FK to agentsam_account (table absent); account_id aligns with accounts.au_* when present.
18
+ -- - Partial unique idx_skill_published_slash included (published slash triggers globally unique).
19
+ -- - Empty slash_trigger → /skill-{id-slug}; dual vectorize → /vectorize-lanes-dual.
20
+ -- - Dropped columns preserved under metadata_json.legacy.
21
+
22
+ SELECT 'see header comments — run cutover in steps' AS note;
@@ -0,0 +1,76 @@
1
+ -- Backfill agentsam_skill v2 from agentsam_skill_legacy (run after 0011 DDL + rename).
2
+ -- Empty slash_trigger → derive from skill id (avoids /unnamed collisions).
3
+
4
+ INSERT INTO agentsam_skill (
5
+ id, account_id, name, slash_trigger,
6
+ description, content_markdown, file_path, content_checksum,
7
+ globs, always_apply, task_types_json, route_keys_json,
8
+ access_mode, icon, tags_json, metadata_json,
9
+ invocation_count, last_invoked_at, version, is_active, sort_order,
10
+ created_at, updated_at
11
+ )
12
+ SELECT
13
+ l.id,
14
+ CASE
15
+ WHEN l.user_id GLOB 'au_*' THEN l.user_id
16
+ WHEN l.user_id = 'sam_primeaux' THEN 'au_8a5b76b737a9f14c'
17
+ WHEN l.user_id IN ('platform', 'system') THEN l.user_id
18
+ WHEN l.person_uuid IS NOT NULL AND TRIM(l.person_uuid) != '' THEN 'person:' || l.person_uuid
19
+ WHEN l.tenant_id IS NOT NULL AND TRIM(l.tenant_id) != '' THEN 'tenant:' || l.tenant_id
20
+ ELSE 'account_orphan'
21
+ END,
22
+ COALESCE(NULLIF(TRIM(l.name), ''), l.id),
23
+ CASE
24
+ WHEN l.id = 'skill_agentsam_dual_vectorize_lanes' THEN '/vectorize-lanes-dual'
25
+ WHEN l.slash_trigger IS NULL OR TRIM(l.slash_trigger) = ''
26
+ THEN '/skill-' || lower(substr(replace(replace(l.id, 'skill_', ''), '_', '-'), 1, 40))
27
+ WHEN lower(CASE
28
+ WHEN l.slash_trigger GLOB '/*' THEN l.slash_trigger
29
+ ELSE '/' || l.slash_trigger
30
+ END) GLOB '/[a-z0-9][a-z0-9-]*'
31
+ THEN lower(CASE
32
+ WHEN l.slash_trigger GLOB '/*' THEN l.slash_trigger
33
+ ELSE '/' || l.slash_trigger
34
+ END)
35
+ ELSE '/skill-' || lower(substr(replace(replace(l.id, 'skill_', ''), '_', '-'), 1, 40))
36
+ END,
37
+ COALESCE(l.description, ''),
38
+ COALESCE(l.content_markdown, ''),
39
+ COALESCE(l.file_path, ''),
40
+ '',
41
+ CASE
42
+ WHEN l.globs IS NULL OR TRIM(l.globs) = '' THEN '[]'
43
+ WHEN l.globs GLOB '[*' THEN l.globs
44
+ ELSE json_array(l.globs)
45
+ END,
46
+ COALESCE(l.always_apply, 0),
47
+ COALESCE(NULLIF(TRIM(l.task_types_json), ''), '[]'),
48
+ COALESCE(NULLIF(TRIM(l.route_keys_json), ''), '[]'),
49
+ CASE
50
+ WHEN l.access_mode IN ('read_only', 'read_write') THEN l.access_mode
51
+ ELSE 'read_write'
52
+ END,
53
+ COALESCE(l.icon, ''),
54
+ COALESCE(NULLIF(TRIM(l.tags_json), ''), '[]'),
55
+ json_object(
56
+ 'legacy', json_object(
57
+ 'tenant_id', l.tenant_id,
58
+ 'user_id', l.user_id,
59
+ 'person_uuid', l.person_uuid,
60
+ 'workspace_id', l.workspace_id,
61
+ 'scope', l.scope,
62
+ 'default_model_key', l.default_model_key,
63
+ 'model_constraints_json', l.model_constraints_json,
64
+ 'token_estimate', l.token_estimate,
65
+ 'retrieval_strategy', l.retrieval_strategy,
66
+ 'slash_trigger_raw', l.slash_trigger
67
+ )
68
+ ),
69
+ COALESCE(l.invocation_count, 0),
70
+ l.last_invoked_at,
71
+ COALESCE(l.version, 1),
72
+ COALESCE(l.is_active, 1),
73
+ COALESCE(l.sort_order, 0),
74
+ COALESCE(l.created_at, datetime('now')),
75
+ COALESCE(l.updated_at, datetime('now'))
76
+ FROM agentsam_skill_legacy l;
@@ -0,0 +1,50 @@
1
+ -- Retrieval + revision backfill after skill rows exist.
2
+
3
+ INSERT INTO agentsam_skill_retrieval (
4
+ id, skill_id, provider, strategy, is_primary,
5
+ index_name, connection_ref, config_json
6
+ )
7
+ SELECT
8
+ 'skillret_' || lower(hex(randomblob(8))),
9
+ s.id,
10
+ CASE
11
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('r2', 'object_store')
12
+ THEN 'cloudflare_r2'
13
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('vectorize', 'vector')
14
+ THEN 'cloudflare_vectorize'
15
+ ELSE 'cloudflare_d1'
16
+ END,
17
+ CASE
18
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('r2', 'object_store')
19
+ THEN 'object_store'
20
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('vectorize', 'vector')
21
+ THEN 'vector_index'
22
+ ELSE 'relational'
23
+ END,
24
+ 1,
25
+ NULLIF(TRIM(s.file_path), ''),
26
+ CASE
27
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('r2', 'object_store')
28
+ THEN 'WEBSITE_ASSETS'
29
+ ELSE 'DB'
30
+ END,
31
+ '{}'
32
+ FROM agentsam_skill s
33
+ WHERE NOT EXISTS (
34
+ SELECT 1 FROM agentsam_skill_retrieval r WHERE r.skill_id = s.id
35
+ );
36
+
37
+ INSERT INTO agentsam_skill_revision (
38
+ id, skill_id, content_markdown, version, changed_by, change_note, created_at
39
+ )
40
+ SELECT
41
+ r.id,
42
+ r.skill_id,
43
+ r.content_markdown,
44
+ r.version,
45
+ COALESCE(NULLIF(TRIM(r.changed_by), ''), 'system'),
46
+ r.change_note,
47
+ COALESCE(r.created_at, datetime('now'))
48
+ FROM agentsam_skill_revision_legacy r
49
+ WHERE EXISTS (SELECT 1 FROM agentsam_skill s WHERE s.id = r.skill_id)
50
+ AND NOT EXISTS (SELECT 1 FROM agentsam_skill_revision x WHERE x.id = r.id);
@@ -0,0 +1,67 @@
1
+ -- 0012_agentsam_tools_required_seed.sql
2
+ -- Registers required tool_key stubs for new projects.
3
+ -- Full handler schemas live in the host agentsam_tools registry; this seed
4
+ -- guarantees GOAP / search_tools / multitask can resolve the required set.
5
+ -- Idempotent: skips rows that already exist by tool_key.
6
+
7
+ INSERT INTO agentsam_tools (
8
+ id, tool_name, tool_key, tool_code, display_name, tool_category,
9
+ handler_type, description, is_active, risk_level, domain, account_id
10
+ )
11
+ SELECT
12
+ 'ast_req_' || lower(hex(randomblob(6))),
13
+ key,
14
+ key,
15
+ key,
16
+ key,
17
+ 'platform',
18
+ 'terminal',
19
+ 'Required AgentSam tool seed · see registry/tools/required-seed.json',
20
+ 1,
21
+ 'low',
22
+ 'general',
23
+ '*'
24
+ FROM (
25
+ SELECT 'fs_read_file' AS key UNION ALL SELECT 'fs_write_file' UNION ALL SELECT 'fs_edit_file'
26
+ UNION ALL SELECT 'fs_list_dir' UNION ALL SELECT 'fs_search_files'
27
+ UNION ALL SELECT 'agentsam_filesystem_walk' UNION ALL SELECT 'agentsam_filesystem_stat_many'
28
+ UNION ALL SELECT 'agentsam_filesystem_hash_many' UNION ALL SELECT 'agentsam_filesystem_git_status'
29
+ UNION ALL SELECT 'agentsam_github_read' UNION ALL SELECT 'agentsam_github_write'
30
+ UNION ALL SELECT 'agentsam_github_pr' UNION ALL SELECT 'agentsam_github_pr_merge'
31
+ UNION ALL SELECT 'agentsam_github_issue' UNION ALL SELECT 'agentsam_github_search'
32
+ UNION ALL SELECT 'agentsam_github_tree' UNION ALL SELECT 'agentsam_github_read_many'
33
+ UNION ALL SELECT 'agentsam_github_patch' UNION ALL SELECT 'agentsam_github_grep'
34
+ UNION ALL SELECT 'agentsam_github_create_repo' UNION ALL SELECT 'agentsam_grep'
35
+ UNION ALL SELECT 'browser_navigate'
36
+ UNION ALL SELECT 'agentsam_memory_search' UNION ALL SELECT 'agentsam_memory_manager'
37
+ UNION ALL SELECT 'agentsam_memory_commit'
38
+ UNION ALL SELECT 'agentsam_d1_query' UNION ALL SELECT 'agentsam_d1_write'
39
+ UNION ALL SELECT 'agentsam_supabase_query' UNION ALL SELECT 'agentsam_supabase_write'
40
+ UNION ALL SELECT 'agentsam_supabase_vector'
41
+ UNION ALL SELECT 'agentsam_r2_get' UNION ALL SELECT 'agentsam_r2_put' UNION ALL SELECT 'agentsam_r2_delete'
42
+ UNION ALL SELECT 'agentsam_cf_vectorize' UNION ALL SELECT 'agentsam_cf_d1_list'
43
+ UNION ALL SELECT 'agentsam_cf_workers_list' UNION ALL SELECT 'agentsam_cf_worker_get'
44
+ UNION ALL SELECT 'agentsam_cf_worker_code'
45
+ UNION ALL SELECT 'agentsam_autorag'
46
+ UNION ALL SELECT 'agentsam_terminal_local' UNION ALL SELECT 'agentsam_terminal_sandbox'
47
+ UNION ALL SELECT 'agentsam_terminal_remote'
48
+ UNION ALL SELECT 'agentsam_create_subagent' UNION ALL SELECT 'agentsam_container_exec'
49
+ UNION ALL SELECT 'search_cloudflare_documentation' UNION ALL SELECT 'agentsam_spawn_tree'
50
+ UNION ALL SELECT 'agentsam_run_agent'
51
+ UNION ALL SELECT 'agentsam_ticket_list' UNION ALL SELECT 'agentsam_ticket_get'
52
+ UNION ALL SELECT 'agentsam_ticket_create' UNION ALL SELECT 'agentsam_ticket_set_status'
53
+ UNION ALL SELECT 'agentsam_code_interpreter'
54
+ UNION ALL SELECT 'cad_generate' UNION ALL SELECT 'cad_job_cancel' UNION ALL SELECT 'cad_job_status'
55
+ UNION ALL SELECT 'agentsam_search_tools'
56
+ UNION ALL SELECT 'agentsam_codebase_retrieve' UNION ALL SELECT 'agentsam_knowledge_ingest_segment'
57
+ UNION ALL SELECT 'agentsam_multitask_spawn' UNION ALL SELECT 'agentsam_multitask_status'
58
+ UNION ALL SELECT 'agentsam_multitask_cancel'
59
+ UNION ALL SELECT 'agentsam_merkle_build' UNION ALL SELECT 'agentsam_merkle_get'
60
+ UNION ALL SELECT 'agentsam_merkle_compare' UNION ALL SELECT 'agentsam_merkle_explain'
61
+ UNION ALL SELECT 'agentsam_merkle_delete'
62
+ UNION ALL SELECT 'agentsam_repo_intelligence' UNION ALL SELECT 'agentsam_code_index_build'
63
+ UNION ALL SELECT 'agentsam_repository_snapshot'
64
+ ) AS required
65
+ WHERE NOT EXISTS (
66
+ SELECT 1 FROM agentsam_tools t WHERE t.tool_key = required.key OR t.tool_name = required.key
67
+ );
@@ -0,0 +1,15 @@
1
+ -- identity_oauth_states — PKCE state for /api/oauth/{provider}/start (identity login).
2
+ -- Deliberately NOT named oauth_states (collides with Stripe Connect schema on this D1).
3
+ -- Required for Sign in with Cloudflare on agentsam.inneranimalmedia.com.
4
+
5
+ CREATE TABLE IF NOT EXISTS identity_oauth_states (
6
+ state TEXT PRIMARY KEY NOT NULL,
7
+ provider TEXT NOT NULL,
8
+ code_verifier TEXT NOT NULL,
9
+ redirect_to TEXT,
10
+ expires_at INTEGER NOT NULL,
11
+ created_at INTEGER NOT NULL
12
+ );
13
+
14
+ CREATE INDEX IF NOT EXISTS idx_identity_oauth_states_expires
15
+ ON identity_oauth_states(expires_at);
@@ -0,0 +1,20 @@
1
+ -- auth_event_log — append-only auth audit (identity package).
2
+ -- status remains outcome-only (ok|failed). Rich context lives in metadata_json.
3
+
4
+ CREATE TABLE IF NOT EXISTS auth_event_log (
5
+ id TEXT PRIMARY KEY NOT NULL,
6
+ user_id TEXT,
7
+ event_type TEXT NOT NULL,
8
+ status TEXT NOT NULL DEFAULT 'ok',
9
+ provider TEXT,
10
+ metadata_json TEXT NOT NULL DEFAULT '{}',
11
+ ip_hash TEXT,
12
+ user_agent_hash TEXT,
13
+ created_at INTEGER NOT NULL DEFAULT (unixepoch())
14
+ );
15
+
16
+ CREATE INDEX IF NOT EXISTS idx_auth_event_log_user_created
17
+ ON auth_event_log(user_id, created_at DESC);
18
+
19
+ CREATE INDEX IF NOT EXISTS idx_auth_event_log_type_created
20
+ ON auth_event_log(event_type, created_at DESC);
@@ -0,0 +1,3 @@
1
+ -- Optional app_id on OAuth PKCE state so post-login resumes the initiating app.
2
+
3
+ ALTER TABLE identity_oauth_states ADD COLUMN app_id TEXT;
@@ -0,0 +1,16 @@
1
+ # Portable control-plane schemas (tickets · memory · skills · tools)
2
+
3
+ Apply from the repo that owns the SQL (agentsam-sdk `migrations/d1/`).
4
+
5
+ | File | Purpose |
6
+ |------|---------|
7
+ | `0010_portable_tickets_memory.sql` | Account-owned `agentsam_tickets` + events + `agentsam_memory` + outbox. `account_id` + `repository_id` **NOT NULL**. |
8
+ | `0011_agentsam_skill_v2.sql` | Skill identity · metrics · retrieval (3-table redesign). Legacy hosts: rename old → `agentsam_skill_legacy`, backfill, verify. |
9
+ | `0012_agentsam_tools_required_seed.sql` | Idempotent seed of required `tool_key` rows for GOAP / multitask. Manifest: `registry/tools/required-seed.json`. |
10
+
11
+ ## Law
12
+
13
+ - **NULL `repository_id` on memory/ticket writes = broken implementation.** Resolve repo identity from `agentsam inspect` / snapshot before insert.
14
+ - Customer tickets use **their** D1/SQLite — never IAM host ticket rows.
15
+ - `agentsam_autorag` stays registered for A* planning even while multi-level retrieval is incomplete.
16
+ - Skill publish uniqueness: partial unique on `slash_trigger WHERE is_published = 1` is included.
@@ -0,0 +1,42 @@
1
+ -- Portable local skill retrieval shape (NOT applied to IAM D1 as-is).
2
+ -- strategy ≠ provider_id ≠ driver_id ≠ accelerator_ref ≠ embedding_profile_id
3
+ -- Hyperdrive is accelerator_ref, never a provider.
4
+
5
+ CREATE TABLE IF NOT EXISTS agentsam_skill_retrieval (
6
+ id TEXT PRIMARY KEY,
7
+ skill_id TEXT NOT NULL,
8
+
9
+ strategy TEXT NOT NULL CHECK (
10
+ strategy IN (
11
+ 'relational',
12
+ 'object_store',
13
+ 'vector_index',
14
+ 'filesystem'
15
+ )
16
+ ),
17
+
18
+ provider_id TEXT NOT NULL,
19
+ driver_id TEXT NOT NULL,
20
+
21
+ connection_ref TEXT,
22
+ accelerator_ref TEXT,
23
+
24
+ embedding_profile_id TEXT,
25
+
26
+ index_name TEXT,
27
+ namespace TEXT,
28
+
29
+ is_primary INTEGER NOT NULL DEFAULT 0,
30
+
31
+ config_json TEXT NOT NULL DEFAULT '{}',
32
+
33
+ last_synced_at TEXT,
34
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
35
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
36
+ );
37
+
38
+ CREATE INDEX IF NOT EXISTS idx_skill_retrieval_skill
39
+ ON agentsam_skill_retrieval(skill_id);
40
+
41
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_skill_retrieval_primary
42
+ ON agentsam_skill_retrieval(skill_id) WHERE is_primary = 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inneranimalmedia/agentsam-sdk",
3
- "version": "2.6.3",
3
+ "version": "2.6.4",
4
4
  "description": "Portable AgentSam SDK and CLI kits for local scaffolding, repository intelligence, incremental indexing, identity adapters, and verified dependency maintenance.",
5
5
  "type": "module",
6
6
  "main": "./src/index.js",
@@ -19,6 +19,19 @@
19
19
  "./knowledge-service-grpc-client": "./src/knowledge/service/grpc-client.js",
20
20
  "./capabilities": "./src/capabilities/index.js",
21
21
  "./capability-manifest": "./protocol/capabilities/manifest.json",
22
+ "./sam": "./src/sam/index.js",
23
+ "./sam/operation-schema": "./protocol/sam/operation.schema.json",
24
+ "./sam/result-schema": "./protocol/sam/result.schema.json",
25
+ "./sam/registry-seed": "./protocol/sam/registry.seed.json",
26
+ "./sam/state-schema": "./protocol/sam/state.v1.schema.json",
27
+ "./sam/question-schema": "./protocol/sam/question.v1.schema.json",
28
+ "./sam/answer-schema": "./protocol/sam/answer.v1.schema.json",
29
+ "./sam/evaluation-schema": "./protocol/sam/evaluation.v1.schema.json",
30
+ "./sam/decision-receipt-schema": "./protocol/sam/decision-receipt.v1.schema.json",
31
+ "./sam/outcome-schema": "./protocol/sam/outcome.v1.schema.json",
32
+ "./sam/calibration-schema": "./protocol/sam/calibration.v1.schema.json",
33
+ "./sam/activity-schema": "./protocol/sam/activity.v1.schema.json",
34
+ "./errors/recovery-schema": "./protocol/errors/recovery.v1.schema.json",
22
35
  "./repository": "./src/repository/index.js",
23
36
  "./repository/contracts": "./packages/agentsam-repository/src/contracts.js",
24
37
  "./repository/identity-schema": "./protocol/repository/repository-identity.schema.json",
@@ -191,6 +204,7 @@
191
204
  "prepublishOnly": "npm run site:sync && npm run verify:release",
192
205
  "site:sync": "node scripts/sync-public-site.mjs",
193
206
  "site:learn": "node scripts/build-learn-site.mjs",
207
+ "site:sam-docs": "node scripts/build-sam-docs.mjs",
194
208
  "site:publish": "node scripts/publish-website-assets.mjs",
195
209
  "security:check": "node src/security/cli.mjs scan",
196
210
  "security:repair": "node src/security/cli.mjs repair",
@@ -204,7 +218,8 @@
204
218
  "cad:registry:check": "node scripts/cad-registry.mjs --check",
205
219
  "test:providers": "node --test packages/providers/completeful/test/*.test.mjs",
206
220
  "test:themes": "npm --prefix packages/heuristic-theme test && npm --prefix packages/theme-church-site test && npm --prefix packages/theme-companions-site test && npm --prefix packages/theme-floors-site test && npm --prefix packages/theme-fuelnfree-site test && npm --prefix packages/theme-handyman-site test && npm --prefix packages/theme-insurance-site test && npm --prefix packages/theme-shinshu-site test",
207
- "theme:harvest": "python3 scripts/theme-refinery/harvest.py"
221
+ "theme:harvest": "python3 scripts/theme-refinery/harvest.py",
222
+ "verify:go-distribution": "node scripts/verify-go-distribution.mjs"
208
223
  },
209
224
  "engines": {
210
225
  "node": ">=22 <25",
@@ -219,7 +234,7 @@
219
234
  "pg": "8.16.3",
220
235
  "picocolors": "^1.1.1",
221
236
  "typescript": "5.9.3",
222
- "wrangler": "4.137.0",
237
+ "wrangler": "4.140.0",
223
238
  "ws": "^8.18.0"
224
239
  },
225
240
  "publishConfig": {
@@ -250,7 +265,7 @@
250
265
  "protobufjs@7.6.6": true,
251
266
  "esbuild@0.28.1": true,
252
267
  "fsevents@2.3.3": true,
253
- "workerd@1.20260921.1": true
268
+ "workerd@1.20260923.1": true
254
269
  },
255
270
  "devDependencies": {
256
271
  "@changesets/changelog-github": "^1.0.1",
@@ -1,4 +1,5 @@
1
1
  // GENERATED by scripts/generate-error-contracts.mjs. Do not edit by hand.
2
+
2
3
  export const AGENTSAM_ERROR_SCHEMA_VERSION = 1 as const;
3
4
 
4
5
  export type AgentSamErrorCode = "OK" | "CANCELLED" | "UNKNOWN" | "INVALID_ARGUMENT" | "DEADLINE_EXCEEDED" | "NOT_FOUND" | "ALREADY_EXISTS" | "PERMISSION_DENIED" | "RESOURCE_EXHAUSTED" | "FAILED_PRECONDITION" | "ABORTED" | "OUT_OF_RANGE" | "UNIMPLEMENTED" | "INTERNAL" | "UNAVAILABLE" | "DATA_LOSS" | "UNAUTHENTICATED";
@@ -8,12 +9,19 @@ export type AgentSamErrorSourceKind = "user" | "agentsam" | "provider" | "depend
8
9
  export type AgentSamErrorResolutionOwner = "user" | "agentsam" | "provider" | "organization_admin" | "policy" | "unknown";
9
10
  export type AgentSamErrorDomain = "runtime" | "provider" | "auth" | "device" | "terminal" | "transport" | "repository" | "indexing" | "knowledge" | "cad" | "deployment" | "persistence" | "policy" | "tool";
10
11
  export type AgentSamRemediationAction = "none" | "retry" | "retry_later" | "reauthenticate" | "connect_provider" | "configure_provider_credential" | "refresh_provider_credential" | "request_permission" | "reenroll_device" | "reconnect_service" | "install_dependency" | "upgrade_dependency" | "configure_dependency" | "change_configuration" | "change_input" | "reduce_scope" | "increase_quota" | "add_budget" | "select_model" | "change_region" | "restart_runtime" | "inspect_platform" | "contact_provider" | "contact_agentsam" | "contact_organization_admin";
12
+ export type AgentSamErrorSideEffectState = "none" | "not_started" | "confirmed_not_applied" | "confirmed_applied" | "partially_applied" | "unknown";
13
+ export type AgentSamErrorOutcomeStatus = "success" | "partial" | "failure";
11
14
 
12
15
  export interface AgentSamErrorSource { kind: AgentSamErrorSourceKind; name: string; service: string | null; }
13
16
  export interface AgentSamErrorRemediation { action: AgentSamRemediationAction; message: string | null; automatic: boolean; command: string | null; url: string | null; }
14
17
  export interface AgentSamErrorResource { type: string; id: string | null; name: string | null; }
15
18
  export interface AgentSamNativeErrorEvidence { code: string | null; exception_type: string | null; exit_code: number | null; signal: string | null; stderr: string | null; stdout: string | null; stack: string | null; }
16
19
  export interface AgentSamEnvironmentEvidence { detected_version: string | null; required_version: string | null; component: string | null; runtime: string | null; platform: string | null; }
20
+ export interface AgentSamErrorOperation { kind?: string | null; action?: string | null; resource_type?: string | null; resource_id?: string | null; read_only?: boolean; idempotent?: boolean; side_effect_state?: AgentSamErrorSideEffectState; }
21
+ export interface AgentSamErrorRetry { allowed?: boolean; strategy?: string; retry_after_ms?: number | null; max_attempts?: number | null; requires_idempotency_key?: boolean; }
22
+ export interface AgentSamErrorFallback { allowed?: boolean; strategy?: string | null; preserve_semantics?: boolean; target?: string | null; }
23
+ export interface AgentSamErrorNotification { user?: string; operator?: string; agent?: string; }
24
+ export interface AgentSamErrorPartialResult { completed?: number; failed?: number; failures?: unknown[]; }
17
25
 
18
26
  export interface AgentSamErrorEnvelope {
19
27
  ok: false;
@@ -43,4 +51,12 @@ export interface AgentSamErrorEnvelope {
43
51
  fingerprint: string;
44
52
  occurrence_count: number;
45
53
  details: unknown;
54
+ failure_class?: string;
55
+ operation?: AgentSamErrorOperation;
56
+ retry?: AgentSamErrorRetry;
57
+ fallback?: AgentSamErrorFallback;
58
+ notify?: AgentSamErrorNotification;
59
+ cause?: unknown;
60
+ status?: AgentSamErrorOutcomeStatus;
61
+ partial?: AgentSamErrorPartialResult;
46
62
  }