@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.
- package/AGENTSAM.md +6 -0
- package/README.md +16 -1
- package/bin/agentsam +16 -1
- package/docs/BRAND_INTELLIGENCE.md +1 -1
- package/docs/architecture/AGENTSAM_DISTRIBUTION_OWNERSHIP.md +176 -0
- package/docs/architecture/AGENTSAM_GO_RUNTIME.md +282 -0
- package/docs/architecture/CODEBASEINDEX_GUIDED_PATH.md +202 -0
- package/docs/architecture/FS_E2E_CLOSURE_RECEIPT.md +59 -0
- package/docs/architecture/LOCAL_FS_AUTHORITY.md +38 -0
- package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +28 -0
- package/docs/architecture/PLAN_CLI_AND_LOCAL_STUDIO_DESKTOP.md +96 -0
- package/docs/architecture/SAM_ACTIVITY_RECOVERY_RECEIPT.md +39 -0
- package/docs/architecture/SAM_DECISION_WORK_RECEIPT.md +54 -0
- package/docs/architecture/SAM_KERNEL.md +181 -0
- package/docs/architecture/SAM_MACHINE_NORMALIZATION_PRECOMMIT_REPORT.md +208 -0
- package/docs/architecture/SLASH_SKILLS_PORTABLE.md +116 -0
- package/docs/architecture/fs-e2e-receipt.latest.json +42 -0
- package/docs/architecture/previews/codebaseindex-guided-path/CODEBASEINDEX_GUIDED_PATH.md +202 -0
- package/docs/architecture/previews/codebaseindex-guided-path/index.html +321 -0
- package/migrations/d1/0010_portable_tickets_memory.sql +140 -0
- package/migrations/d1/0011_agentsam_skill_v2.sql +185 -0
- package/migrations/d1/0011b_agentsam_skill_v2_cutover.sql +22 -0
- package/migrations/d1/0011c_agentsam_skill_v2_backfill.sql +76 -0
- package/migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql +50 -0
- package/migrations/d1/0012_agentsam_tools_required_seed.sql +67 -0
- package/migrations/d1/0013_identity_oauth_states.sql +15 -0
- package/migrations/d1/0014_auth_event_log.sql +20 -0
- package/migrations/d1/0015_identity_oauth_state_app_id.sql +3 -0
- package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +16 -0
- package/migrations/sqlite/agentsam_skill_retrieval.portable.sql +42 -0
- package/package.json +19 -4
- package/packages/agentsam-contracts/src/errors.ts +16 -0
- package/packages/agentsam-errors/src/envelope.js +53 -0
- package/packages/agentsam-errors/src/index.js +1 -0
- package/packages/agentsam-errors/src/recovery.js +301 -0
- package/packages/agentsam-knowledge/src/providers/index.js +18 -6
- package/packages/connectors/cloudflare/src/routes.js +9 -0
- package/packages/connectors/cloudflare/tests/connector.test.mjs +26 -1
- package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
- package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +11 -2
- package/packages/identity/docs/PORTABLE_IDENTITY_ARCHITECTURE.md +50 -0
- package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +31 -0
- package/packages/identity/migrations/sqlite/001_identity_core.sql +99 -0
- package/packages/identity/migrations/sqlite/002_identity_oauth_client.sql +38 -0
- package/packages/identity/migrations/sqlite/003_identity_oauth_server.sql +64 -0
- package/packages/identity/package.json +2 -2
- package/packages/identity/src/adapters/cloudflare-d1/index.js +122 -22
- package/packages/identity/src/adapters/sqlite/index.js +319 -0
- package/packages/identity/src/app/verify-app.js +95 -0
- package/packages/identity/src/contracts/identity-store.js +115 -0
- package/packages/identity/src/contracts/route-ids.js +30 -0
- package/packages/identity/src/contracts/route-projection.js +218 -0
- package/packages/identity/src/contracts/routes.js +11 -0
- package/packages/identity/src/core/browser-paths.js +4 -5
- package/packages/identity/src/core/constants.js +13 -8
- package/packages/identity/src/core/session-policy.js +32 -0
- package/packages/identity/src/frontend/auth-portal/pages/login.html +10 -10
- package/packages/identity/src/frontend/auth-portal/pages/reset.html +3 -3
- package/packages/identity/src/frontend/auth-portal/pages/signup.html +3 -3
- package/packages/identity/src/frontend/auth-portal/preview/dashboard-stub.html +1 -1
- package/packages/identity/src/index.js +25 -0
- package/packages/identity/src/oauth/README.md +10 -4
- package/packages/identity/src/oauth/credentials.js +20 -13
- package/packages/identity/src/oauth/finalize-inbound.js +1 -1
- package/packages/identity/src/oauth/iam-platform.js +8 -7
- package/packages/identity/src/oauth/redirect-paths.js +27 -36
- package/packages/identity/src/server/identity-service.js +30 -13
- package/packages/identity/src/server/mount-policy.js +30 -0
- package/packages/identity/src/server/post-auth.js +79 -0
- package/packages/identity/src/server/worker-router.js +104 -72
- package/packages/identity/tests/finalize-inbound-oauth.test.mjs +6 -6
- package/packages/identity/tests/iam-provider.test.mjs +1 -1
- package/packages/identity/tests/identity-service.test.mjs +36 -5
- package/packages/identity/tests/oauth-credentials.test.mjs +3 -1
- package/packages/identity/tests/portable-identity-architecture.test.mjs +157 -0
- package/packages/identity/tests/session-routes-policy.test.mjs +21 -0
- package/packages/theme-church-site/package.json +2 -1
- package/packages/theme-church-site/src/index.js +1 -0
- package/packages/theme-companions-site/package.json +2 -1
- package/packages/theme-companions-site/src/index.js +1 -0
- package/packages/theme-floors-site/package.json +2 -1
- package/packages/theme-floors-site/src/index.js +1 -0
- package/packages/theme-fuelnfree-site/package.json +2 -1
- package/packages/theme-fuelnfree-site/src/index.js +1 -0
- package/packages/theme-handyman-site/package.json +2 -1
- package/packages/theme-handyman-site/src/index.js +1 -0
- package/packages/theme-insurance-site/package.json +2 -1
- package/packages/theme-insurance-site/src/index.js +1 -0
- package/packages/theme-shinshu-site/package.json +2 -1
- package/packages/theme-shinshu-site/src/index.js +1 -0
- package/protocol/apps/agentsam.app.v1.schema.json +51 -0
- package/protocol/brand/brandpack.v1.schema.json +43 -0
- package/protocol/credentials/issue.v1.schema.json +38 -0
- package/protocol/database/connection.v1.schema.json +41 -0
- package/protocol/embeddings/embedding-profile.v1.schema.json +20 -0
- package/protocol/errors/error-envelope.schema.json +135 -1
- package/protocol/errors/recovery.v1.schema.json +50 -0
- package/protocol/runtime/workspace-fs.v1.schema.json +71 -0
- package/protocol/sam/activity.v1.schema.json +48 -0
- package/protocol/sam/answer.v1.schema.json +35 -0
- package/protocol/sam/calibration.v1.schema.json +21 -0
- package/protocol/sam/decision-receipt.v1.schema.json +29 -0
- package/protocol/sam/evaluation.v1.schema.json +19 -0
- package/protocol/sam/operation.schema.json +66 -0
- package/protocol/sam/outcome.v1.schema.json +36 -0
- package/protocol/sam/question.v1.schema.json +26 -0
- package/protocol/sam/registry.seed.json +153 -0
- package/protocol/sam/result.schema.json +53 -0
- package/protocol/sam/state.v1.schema.json +23 -0
- package/protocol/skills/agentsam.interaction.v1.schema.json +50 -0
- package/protocol/skills/agentsam.skill.v1.schema.json +57 -0
- package/protocol/ui/icon-registry.mjs +226 -0
- package/protocol/ui/icon.v1.schema.json +51 -0
- package/skills/README.md +22 -9
- package/skills/agentsam-codebaseindex/SKILL.md +225 -0
- package/skills/catalog.json +14 -0
- package/src/cli/command-catalog.js +130 -0
- package/src/cli/dispatch.js +48 -0
- package/src/cli.js +43 -1
- package/src/commands/api-key.js +244 -0
- package/src/commands/app.js +60 -28
- package/src/commands/brand.js +17 -19
- package/src/commands/codebaseindex.js +688 -0
- package/src/commands/env.js +152 -25
- package/src/commands/go.js +366 -53
- package/src/commands/interaction-clack.js +115 -0
- package/src/commands/models.js +1 -1
- package/src/commands/providers.js +62 -14
- package/src/commands/shell.js +43 -2
- package/src/commands/skill.js +248 -0
- package/src/commands/skills.js +1 -1
- package/src/commands/start-local.js +4 -0
- package/src/commands/whoami.js +90 -18
- package/src/go/build.js +229 -39
- package/src/go/cloudflare.js +506 -105
- package/src/go/container.js +120 -0
- package/src/go/contract.js +9 -4
- package/src/go/discover.js +149 -33
- package/src/go/index.js +15 -3
- package/src/go/native-probe-runner.mjs +119 -0
- package/src/go/{registry.js → official-registry.js} +64 -7
- package/src/go/official-release.js +10 -0
- package/src/go/receipts.js +77 -10
- package/src/go/verify.js +9 -2
- package/src/index.js +27 -0
- package/src/indexing/ingest/discover-models.js +298 -0
- package/src/indexing/ingest/inventory.js +243 -0
- package/src/indexing/ingest/job-graph.js +181 -0
- package/src/indexing/ingest/materials.js +210 -0
- package/src/lib/provider-credentials.js +63 -21
- package/src/lib/slash-commands.js +1 -0
- package/src/local-fs/capability.js +121 -0
- package/src/local-fs/freshness.js +75 -0
- package/src/local-fs/index.js +385 -0
- package/src/local-fs/paths.js +100 -0
- package/src/local-pty/server.js +295 -19
- package/src/mcp/client.js +2 -2
- package/src/models/ai-access-onboarding.js +112 -0
- package/src/models/discovery.js +10 -2
- package/src/models/inventory-core.js +9 -1
- package/src/sam/activity/index.js +183 -0
- package/src/sam/client.js +252 -0
- package/src/sam/decision/calibration.js +109 -0
- package/src/sam/decision/confidence.js +126 -0
- package/src/sam/decision/evaluate.js +157 -0
- package/src/sam/decision/evaluators/deterministic.js +341 -0
- package/src/sam/decision/evaluators/heuristic.js +61 -0
- package/src/sam/decision/evaluators/select.js +50 -0
- package/src/sam/decision/evaluators/semantic.js +149 -0
- package/src/sam/decision/hierarchical.js +61 -0
- package/src/sam/decision/index.js +53 -0
- package/src/sam/decision/policy.js +86 -0
- package/src/sam/decision/questions.js +120 -0
- package/src/sam/decision/receipt.js +148 -0
- package/src/sam/decision/state.js +117 -0
- package/src/sam/decision/types.js +22 -0
- package/src/sam/decision/validate.js +200 -0
- package/src/sam/define.js +51 -0
- package/src/sam/index.js +65 -0
- package/src/sam/operations/brand-scan.js +62 -0
- package/src/sam/operations/cad-blender-inspect.js +36 -0
- package/src/sam/operations/codebaseindex-ingest.js +49 -0
- package/src/sam/operations/decision-evaluate.js +59 -0
- package/src/sam/operations/planning-astar.js +77 -0
- package/src/sam/operations/planning-goap.js +60 -0
- package/src/sam/operations/repository-inspect.js +72 -0
- package/src/sam/operations/security-scan.js +33 -0
- package/src/sam/operations/terminal-exec.js +29 -0
- package/src/sam/planning/astar.js +311 -0
- package/src/sam/planning/goap.js +177 -0
- package/src/sam/planning/index.js +21 -0
- package/src/sam/planning/state.js +84 -0
- package/src/sam/registry.js +48 -0
- package/src/sam/result.js +77 -0
- package/src/sam/seed.js +44 -0
- package/src/sam/types.js +91 -0
- package/src/skills/catalog.js +64 -0
- package/src/skills/content-resolver.js +124 -0
- package/src/skills/hosted-store.js +37 -0
- package/src/skills/index.js +29 -64
- package/src/skills/interaction.js +102 -0
- package/src/skills/local-store.js +228 -0
- package/src/skills/manifest.js +104 -0
- package/src/skills/metrics.js +31 -0
- package/src/skills/registry.js +184 -0
- package/src/skills/runtime.js +287 -0
- package/src/skills/slash.js +44 -0
- package/src/ui/cli/help.js +94 -101
- package/test/cli/api-key-env-whoami.test.mjs +129 -0
- package/test/cli/codebaseindex-plan-ux.test.mjs +37 -0
- package/test/cli/go.test.mjs +62 -5
- package/test/cli/skill-npm-and-env.test.mjs +52 -0
- package/test/cli/wireframes-go-registry.test.mjs +87 -2
- package/test/go/build-source-identity.test.mjs +31 -0
- package/test/go/cloudflare-probe.test.mjs +274 -10
- package/test/go/distribution.test.mjs +28 -0
- package/test/integration/ai-access-onboarding.test.mjs +47 -0
- package/test/integration/cli-help.test.mjs +1 -1
- package/test/integration/cms-site-tenancy-contract.test.mjs +6 -6
- package/test/integration/codebaseindex-ingest.test.mjs +166 -0
- package/test/integration/icon-registry.test.mjs +67 -0
- package/test/integration/ingest-discover-models.test.mjs +30 -0
- package/test/integration/install-script.test.mjs +12 -9
- package/test/integration/local-fs.test.mjs +113 -0
- package/test/integration/provider-env-cli.test.mjs +2 -1
- package/test/integration/sam-activity-recovery.test.mjs +147 -0
- package/test/integration/sam-decision.test.mjs +584 -0
- package/test/integration/sam-kernel.test.mjs +99 -0
- package/test/integration/sam-planning-astar.test.mjs +279 -0
- package/test/integration/skill-runtime.test.mjs +240 -0
- package/test/integration/studio-fs-pty-e2e.test.mjs +294 -0
- package/test/models.test.mjs +14 -7
- package/test/shell.test.mjs +4 -4
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# SAM Kernel — Systematic Autonomous Machinery
|
|
2
|
+
|
|
3
|
+
**Status:** LOCKED vocabulary + seed contracts (2026-09-25)
|
|
4
|
+
**Product:** AgentSam (`@inneranimalmedia/agentsam-sdk`)
|
|
5
|
+
**Machinery:** SAM = **Systematic Autonomous Machinery**
|
|
6
|
+
|
|
7
|
+
This document is the canonical architecture for how AgentSam exposes work. It does **not** replace `AGENTSAM.md` runtime agent law; it defines the developer-facing execution spine.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Naming (non-negotiable)
|
|
12
|
+
|
|
13
|
+
| Term | Meaning |
|
|
14
|
+
|------|---------|
|
|
15
|
+
| **AgentSam** | Product / SDK / CLI / platform |
|
|
16
|
+
| **SAM** | **Systematic Autonomous Machinery** — the execution architecture underneath AgentSam |
|
|
17
|
+
| **`sam`** | Conventional client variable for that machinery — **not** a human identity or owner name |
|
|
18
|
+
| **`sam.invoke()`** | Universal normalized execution doorway |
|
|
19
|
+
|
|
20
|
+
Docs and comments prefer:
|
|
21
|
+
|
|
22
|
+
- “SAM resolves the registered operation…”
|
|
23
|
+
- “AgentSam executes the operation through SAM…”
|
|
24
|
+
|
|
25
|
+
Never:
|
|
26
|
+
|
|
27
|
+
- “Sam will decide…”
|
|
28
|
+
- anthropomorphic `sam.ask()` / `sam.think()` as public verbs
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Hierarchy
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
@inneranimalmedia/agentsam-sdk
|
|
36
|
+
│
|
|
37
|
+
├── AgentSamClient (sam)
|
|
38
|
+
│ ├── session: login / logout / whoami
|
|
39
|
+
│ ├── runtime: status / configuration
|
|
40
|
+
│ └── SAM: invoke / describe / discover + domain modules
|
|
41
|
+
│
|
|
42
|
+
├── SAM Kernel
|
|
43
|
+
│ auth · schemas · policy · execution lanes · events · errors · receipts
|
|
44
|
+
│
|
|
45
|
+
├── Modules (brand, repository, knowledge, security, cad, cms, …)
|
|
46
|
+
│ register operations into the kernel — they do not own a second runtime
|
|
47
|
+
│
|
|
48
|
+
├── Operations · Capabilities · Tools · Skills · Pipelines · Providers · Contracts
|
|
49
|
+
└── Projections: TypeScript · CLI · MCP · HTTP · Python · Workbench · docs
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**CLI is a projection, not the source of truth.** Canonical identity is the **operation ID**.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Four seed primitives
|
|
57
|
+
|
|
58
|
+
| Primitive | Role |
|
|
59
|
+
|-----------|------|
|
|
60
|
+
| `defineSamOperation()` | Register one operation (schemas, lanes, model policy, handler) |
|
|
61
|
+
| `sam.invoke(id, input, options?)` | Execute any registered operation |
|
|
62
|
+
| `sam.describe(id)` | Metadata / schemas / requirements without execution |
|
|
63
|
+
| `sam.discover({ query })` | Compact operation cards before schema hydration |
|
|
64
|
+
|
|
65
|
+
Domain ergonomics are projections of `invoke`:
|
|
66
|
+
|
|
67
|
+
```js
|
|
68
|
+
await sam.brand.scan({ root: '.' });
|
|
69
|
+
// ≡
|
|
70
|
+
await sam.invoke('brand.scan', { root: '.' });
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Vocabulary
|
|
76
|
+
|
|
77
|
+
| Kind | Meaning |
|
|
78
|
+
|------|---------|
|
|
79
|
+
| **module** | Domain namespace (`brand`, `repository`, `cad`) |
|
|
80
|
+
| **operation** | User-callable capability (`brand.scan`) |
|
|
81
|
+
| **tool** | Bounded executable primitive (often agent-facing) |
|
|
82
|
+
| **skill** | Procedural knowledge / instructions |
|
|
83
|
+
| **pipeline** | Ordered composition of operations/tools |
|
|
84
|
+
| **capability** | Declaration of what the runtime can perform |
|
|
85
|
+
| **provider** | Adapter to an external/local implementation |
|
|
86
|
+
| **contract** | Portable schemas / types / vocabulary |
|
|
87
|
+
|
|
88
|
+
Do not flatten everything into “tools.”
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Operation contract (normative)
|
|
93
|
+
|
|
94
|
+
Every externally callable AgentSam capability:
|
|
95
|
+
|
|
96
|
+
1. Has **one** canonical operation ID (`module.action` or `module.subsystem.action`)
|
|
97
|
+
2. Declares typed **input** / **output** schemas
|
|
98
|
+
3. Declares **execution** metadata: lanes, `model: never|optional|required`, network, side effects, risk
|
|
99
|
+
4. Is invokable through **SAM** (`invoke`) and projected to CLI / MCP / HTTP without renaming authority
|
|
100
|
+
5. Returns a **SamResult** envelope (`data` + `receipt` + optional evidence/artifacts/usage)
|
|
101
|
+
|
|
102
|
+
Alias ≠ authority. Human CLI aliases (`agentsam inspect`, `agentsam sca`) remain; internal ID stays `repository.inspect` / `security.scan`.
|
|
103
|
+
|
|
104
|
+
### Session vs operations
|
|
105
|
+
|
|
106
|
+
`login`, `logout`, `whoami`, shell preferences, and help are **client/session/runtime** controls. Do not force them through `sam.invoke('auth.login')`.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Result envelope
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
interface SamResult<T> {
|
|
114
|
+
schema: 'agentsam.result.v1';
|
|
115
|
+
operation: string;
|
|
116
|
+
ok: boolean;
|
|
117
|
+
data: T;
|
|
118
|
+
receipt: SamReceipt;
|
|
119
|
+
evidence?: unknown[];
|
|
120
|
+
artifacts?: unknown[];
|
|
121
|
+
usage?: { provider_calls: number; cost_usd?: number; /* … */ };
|
|
122
|
+
warnings?: unknown[];
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
`data` is what the caller asked for. `receipt` is how SAM proves what happened.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Execution policy (AI is a lane, not the API)
|
|
131
|
+
|
|
132
|
+
`choice()` / `predicate()` / `score()` (future `sam.machine.evaluate`) mean **bounded classification**, not “send to GPT.” Runtime may satisfy via rules, cache, heuristics, local models, or remote models under policy.
|
|
133
|
+
|
|
134
|
+
Operations declare `model: never | optional | required` so `$0` machinery is machine metadata, not README prose.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Seed operations (first migration set)
|
|
139
|
+
|
|
140
|
+
| Operation ID | CLI projection | model |
|
|
141
|
+
|--------------|----------------|-------|
|
|
142
|
+
| `repository.inspect` | `agentsam inspect` | never |
|
|
143
|
+
| `brand.scan` | `agentsam brand scan` | never |
|
|
144
|
+
| `security.scan` | `agentsam security scan` | never |
|
|
145
|
+
| `terminal.exec` | (runtime / tools) | never |
|
|
146
|
+
| `cad.blender.inspect` | `agentsam cad blender inspect` | never |
|
|
147
|
+
| `codebaseindex.ingest` | `agentsam codebaseindex` / `ingest` | optional |
|
|
148
|
+
|
|
149
|
+
Pipeline alias for host escalation: `sam.codebaseindex.index.run`.
|
|
150
|
+
|
|
151
|
+
Handlers reuse existing implementations. New work asks: **What module owns this operation?**
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Go / agentsamd (next lane — Slice H)
|
|
156
|
+
|
|
157
|
+
Local durable machine service (`agentsamd`) owns PTY, jobs, local invoke — **not** a Tauri rewrite. `AGENTSAM_API_KEY` authenticates **remote/platform** operations; local capabilities stay key-optional. Tauri may later consume the same daemon.
|
|
158
|
+
|
|
159
|
+
See: Go Worker product lane already live; expand carefully.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Related files
|
|
164
|
+
|
|
165
|
+
| Path | Role |
|
|
166
|
+
|------|------|
|
|
167
|
+
| `protocol/sam/operation.schema.json` | Operation metadata schema |
|
|
168
|
+
| `protocol/sam/result.schema.json` | SamResult envelope |
|
|
169
|
+
| `protocol/sam/registry.seed.json` | Seed operation registry |
|
|
170
|
+
| `src/sam/` | Kernel registry + `AgentSamClient` / `invoke` / `describe` / `discover` |
|
|
171
|
+
| `protocol/capabilities/manifest.json` | Existing capability cards (migrate into ops over time) |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Anti-patterns
|
|
176
|
+
|
|
177
|
+
- Building a miniature runtime inside each package
|
|
178
|
+
- Making `systemOne()` / chat APIs the flagship surface
|
|
179
|
+
- Letting CLI command strings define internal operation IDs
|
|
180
|
+
- Requiring `AGENTSAM_API_KEY` for local inspect/merkle/security
|
|
181
|
+
- Documenting APIs by hand that should be projections of the registry
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# PRE-COMMIT REPORT — SAM Machine Normalization Sprint
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-09-25
|
|
4
|
+
**Repo:** `@inneranimalmedia/agentsam-sdk`
|
|
5
|
+
**Status:** **NOT COMMITTED** — awaiting your review per sprint contract §32
|
|
6
|
+
**Working tree:** dirty with the changes summarized below
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Current command-catalog authority
|
|
11
|
+
|
|
12
|
+
- **Authority file:** `src/cli/command-catalog.js` (`CLI_COMMAND_CATALOG`)
|
|
13
|
+
- **Help:** `src/ui/cli/help.js` already consumes the catalog (topics/common/skill tips)
|
|
14
|
+
- **Tips:** `printAssistTip()` — human stderr only; **skipped for `--json`**
|
|
15
|
+
- **New:** `src/cli/dispatch.js` — lazy handler bootstrap (partial)
|
|
16
|
+
|
|
17
|
+
## 2. Remaining command truth still hardcoded in `cli.js`
|
|
18
|
+
|
|
19
|
+
- The giant `if/else` dispatch chain from `create` → `scaffold` is **still live**
|
|
20
|
+
- Legacy `printLegacyHelp()` prose block remains in `cli.js`
|
|
21
|
+
- Init interactive still hardcodes lane options (Full Stack / CMS / …)
|
|
22
|
+
- Catalog dispatch only wires: `codebaseindex|ingest`, `skills|skill`
|
|
23
|
+
- **Deferred:** full cutover of ~45 verbs to lazy catalog handlers
|
|
24
|
+
|
|
25
|
+
## 3. Final SamOperation contract (this sprint)
|
|
26
|
+
|
|
27
|
+
Rich fields now supported by `defineSamOperation()` / `src/sam/types.js`:
|
|
28
|
+
|
|
29
|
+
| Field | Role |
|
|
30
|
+
|-------|------|
|
|
31
|
+
| `id`, `version`, `module`, `action` | Identity |
|
|
32
|
+
| `summary` | Card/search |
|
|
33
|
+
| `purpose`, `outcome` | Product capability semantics |
|
|
34
|
+
| `accepts[]` | Material / input kinds |
|
|
35
|
+
| `phases[]` | Execution phases |
|
|
36
|
+
| `artifacts[]` | Produced artifact kinds |
|
|
37
|
+
| `skill` | `{ id, help }` or `null` |
|
|
38
|
+
| `preview` | `{ available, operation }` |
|
|
39
|
+
| `execution` | lanes, model, network, sideEffects, **embedding**, **provider_spend** |
|
|
40
|
+
| `risk`, `capabilities`, `cli`, `docs`, `status` | Policy + projections |
|
|
41
|
+
| `handler` | Existing machinery |
|
|
42
|
+
|
|
43
|
+
Thin `{ id, module, action, summary }` alone is **not** treated as a complete capability definition.
|
|
44
|
+
|
|
45
|
+
## 4. Commands / operations graduated in this working set
|
|
46
|
+
|
|
47
|
+
| Operation | Notes |
|
|
48
|
+
|-----------|-------|
|
|
49
|
+
| `repository.inspect` | Purpose/outcome/phases/accepts enriched; richer return refs |
|
|
50
|
+
| `brand.scan` | BrandPack-oriented contract; points to `brand.preview` |
|
|
51
|
+
| `codebaseindex.ingest` | Inventory-first phases; job graph artifact |
|
|
52
|
+
| `terminal.exec`, `security.scan`, `cad.blender.inspect` | Still on prior seed contracts (not re-authored this pass) |
|
|
53
|
+
|
|
54
|
+
Desktop:
|
|
55
|
+
|
|
56
|
+
| Item | Change |
|
|
57
|
+
|------|--------|
|
|
58
|
+
| Local Studio manifest | `launch_path: "/agentsam"` + `routes` + `auth` notes |
|
|
59
|
+
|
|
60
|
+
## 5. Skill mapping
|
|
61
|
+
|
|
62
|
+
| Command / op | Skill |
|
|
63
|
+
|--------------|-------|
|
|
64
|
+
| codebaseindex / ingest | `agentsam-codebaseindex` |
|
|
65
|
+
| repository.inspect | `agentsam-app-fundamentals` (until `agentsam-repository` skill exists) |
|
|
66
|
+
| brand.scan | `agentsam-app-fundamentals` (until `agentsam-brand` skill exists) |
|
|
67
|
+
| security | `agentsam-progression-guard` |
|
|
68
|
+
| cloudflare / mcp / go | `agentsam-cloudflare-workers` |
|
|
69
|
+
|
|
70
|
+
**Deferred:** dedicated `agentsam-brand`, `agentsam-repository`, `agentsam-security`, `agentsam-cad`, `agentsam-mcp`, `agentsam-identity` skill packs.
|
|
71
|
+
|
|
72
|
+
## 6. Generic material-ingest contract
|
|
73
|
+
|
|
74
|
+
- **Current:** `src/lib/ingest/materials.js` (stage under `.agentsam/ingest/<id>/`)
|
|
75
|
+
- **Shared:** used by codebaseindex; ops declare `accepts[]`
|
|
76
|
+
- **Deferred:** promote to first-class SAM material resolver for brand/cad/security; zip slip limits / symlink escape hardening tests; `--stdin` convention end-to-end
|
|
77
|
+
|
|
78
|
+
## 7. Inventory output schema
|
|
79
|
+
|
|
80
|
+
- `agentsam.inventory.v1` via `src/lib/ingest/inventory.js`
|
|
81
|
+
- Fields: counts, languages, top_level, suggested include/exclude, sample_paths, materials
|
|
82
|
+
- Human projection: `formatInventoryTree()` (ASCII is **not** authority)
|
|
83
|
+
|
|
84
|
+
## 8. Codebaseindex guided flow (now)
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
① Connection discovery (credentials + ollama list)
|
|
88
|
+
② Materials (paste/drop)
|
|
89
|
+
③ INVENTORY / file map ← confirm before scope
|
|
90
|
+
④ Include / exclude (inventory suggestions · manual · optional Ollama assist)
|
|
91
|
+
⑤ Embedding profile (discovered only; always includes none)
|
|
92
|
+
⑥ Vector lane: local | supabase+node-api | vectorize
|
|
93
|
+
⑦ Dry-run/plan (default) or execute
|
|
94
|
+
→ job graph printed
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 9. Local SQLite schema / migrations
|
|
98
|
+
|
|
99
|
+
- **Deferred:** portable spine migrations mirroring D1 logical core
|
|
100
|
+
- Today: existing `.agentsam/knowledge/index.sqlite` knowledge store only
|
|
101
|
+
|
|
102
|
+
## 10. D1 mapping (logical — not copied blindly)
|
|
103
|
+
|
|
104
|
+
`code_repositories`, merkle/evidence, `agentsam_code_index_job(+_file)`, `codebase_ast_nodes`, `codebase_dep_edges`, health, `agentsam_pgvector_lane_registry`
|
|
105
|
+
|
|
106
|
+
## 11. Supabase / Postgres mapping
|
|
107
|
+
|
|
108
|
+
Host SSOT tables (Gemini@1536):
|
|
109
|
+
|
|
110
|
+
- `agentsam.agentsam_codebase_chunks_gemini_embedding_2_1536`
|
|
111
|
+
- `agentsam.agentsam_codebase_files_gemini_embedding_2_1536`
|
|
112
|
+
- `agentsam.agentsam_codebase_ast_symbols_gemini_embedding_2_1536`
|
|
113
|
+
- `agentsam.agentsam_gemini_semantic_embeddings_1536`
|
|
114
|
+
- `agentsam.agentsam_documents_gemini_embedding_2_1536`
|
|
115
|
+
|
|
116
|
+
Customer template: BYO node-api edge + Hyperdrive (documented in `CODEBASEINDEX_GUIDED_PATH.md`).
|
|
117
|
+
|
|
118
|
+
## 12. Vectorize mapping
|
|
119
|
+
|
|
120
|
+
- Lane selectable in wizard as `vectorize`
|
|
121
|
+
- **Deferred:** full CF Vectorize adapter write path (receipt notes only today)
|
|
122
|
+
- IAM host code-index SSOT remains Supabase pgvector, not Vectorize
|
|
123
|
+
|
|
124
|
+
## 13. Embedding discovery source per provider
|
|
125
|
+
|
|
126
|
+
| Source | Mechanism |
|
|
127
|
+
|--------|-----------|
|
|
128
|
+
| OpenAI | Live `/v1/models` when credential configured |
|
|
129
|
+
| Gemini | Credential → knowledge adapter model list |
|
|
130
|
+
| Ollama | Live `/api/tags`; embed-like tags → embed picker; chat tags → scope assist |
|
|
131
|
+
| None | Always offered |
|
|
132
|
+
|
|
133
|
+
## 14. Profile identity / fingerprint
|
|
134
|
+
|
|
135
|
+
- Knowledge engine already fingerprints embedding profile (`embeddingProfileId`)
|
|
136
|
+
- Encoding: `provider|model|dimensions` (colon-safe for `mxbai-embed-large:latest`)
|
|
137
|
+
- Semantic retrieve fails closed on profile mismatch
|
|
138
|
+
- **Deferred:** replace `defaultDimensions()` regex with adapter metadata + Ollama probe length as sole authority
|
|
139
|
+
|
|
140
|
+
## 15. App discovery mechanism
|
|
141
|
+
|
|
142
|
+
- **Deferred:** `agentsam app options` from manifests (`apps/*/agentsam.app.json`, themes)
|
|
143
|
+
- Current `app` command path still mostly launcher-shaped
|
|
144
|
+
|
|
145
|
+
## 16. Init / app-options UX
|
|
146
|
+
|
|
147
|
+
- **Deferred:** replace hardcoded Full Stack/CMS/… init menu with discoverable apps/themes/materials start
|
|
148
|
+
|
|
149
|
+
## 17. BrandPack schema
|
|
150
|
+
|
|
151
|
+
- Added: `protocol/brand/brandpack.v1.schema.json` (`agentsam.brandpack.v1`)
|
|
152
|
+
- **Deferred:** `brand.preview` handler, localhost brand grid, pack export/import round-trip
|
|
153
|
+
|
|
154
|
+
## 18. Brand preview path
|
|
155
|
+
|
|
156
|
+
- Contract points to `brand.preview` with `sideEffects: local_write` intended
|
|
157
|
+
- **Not implemented** this pass (scan stays read-only)
|
|
158
|
+
|
|
159
|
+
## 19. Tests run
|
|
160
|
+
|
|
161
|
+
```text
|
|
162
|
+
node --test test/sam-kernel.test.mjs test/codebaseindex-ingest.test.mjs test/ingest-discover-models.test.mjs
|
|
163
|
+
→ 23 pass / 0 fail
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## 20. Intentionally deferred
|
|
167
|
+
|
|
168
|
+
1. Full `cli.js` catalog cutover (kill legacy help + if/else)
|
|
169
|
+
2. `agentsam app options` + init discovery
|
|
170
|
+
3. `brand.preview` + BrandPack export/import UX
|
|
171
|
+
4. Shared material resolver with archive sandbox hard limits + tests
|
|
172
|
+
5. Ollama dimension probe as SSOT (retire name heuristics)
|
|
173
|
+
6. Metadata vs vectors storage split as first-class config object (wizard records lanes; knowledge.json still primarily sqlite|postgres)
|
|
174
|
+
7. Local SQLite portable D1-spine migrations
|
|
175
|
+
8. Customer node-api / Supabase template pack
|
|
176
|
+
9. Wire Local Studio session gate: `/agentsam` → session check → `/auth/login?next=/agentsam`
|
|
177
|
+
10. agentsamd behind Tauri (Slice H)
|
|
178
|
+
11. Rebuild/reinstall DMG after manifest change (needs `build-brand` + Tauri release)
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Desktop auth note (your screenshots)
|
|
183
|
+
|
|
184
|
+
Three surfaces:
|
|
185
|
+
|
|
186
|
+
| URL | Role |
|
|
187
|
+
|-----|------|
|
|
188
|
+
| `/` | PUBLIC marketing — **not** desktop home |
|
|
189
|
+
| `/auth/login` | IDENTITY |
|
|
190
|
+
| `/agentsam` | PRODUCT (Local Studio) |
|
|
191
|
+
|
|
192
|
+
Manifest fix: `launch_path: "/agentsam"`. Login entry: `/auth/login?next=/agentsam`. Re-run desktop brand build + reinstall to pick up in `/Applications`.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Files touched (pending commit)
|
|
197
|
+
|
|
198
|
+
- `packages/agentsam-desktop-shell/manifests/local-studio.json`
|
|
199
|
+
- `packages/agentsam-desktop-shell/manifests/schema.json`
|
|
200
|
+
- `src/sam/types.js`, `define.js`, `client.js`
|
|
201
|
+
- `src/sam/operations/{repository-inspect,brand-scan,codebaseindex-ingest}.js`
|
|
202
|
+
- `src/commands/codebaseindex.js` (inventory-first wizard)
|
|
203
|
+
- `src/lib/ingest/{inventory,job-graph}.js`
|
|
204
|
+
- `src/cli/{command-catalog,dispatch}.js`
|
|
205
|
+
- `protocol/brand/brandpack.v1.schema.json`
|
|
206
|
+
- this report: `docs/architecture/SAM_MACHINE_NORMALIZATION_PRECOMMIT_REPORT.md`
|
|
207
|
+
|
|
208
|
+
**No commit / no push** until you approve.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Portable slash skills — architecture & migration report
|
|
2
|
+
|
|
3
|
+
**Status:** implemented in `agentsam-sdk` (local-first). **Not committed** pending review.
|
|
4
|
+
**Do not** copy IAM `skill-slash-invoke.js` / R2 hydration / platform account fallback into the SDK.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Target architecture
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
/skill args
|
|
12
|
+
↓
|
|
13
|
+
parseSlashInvocation() ← CLI / shell only; prose = no lookup
|
|
14
|
+
↓
|
|
15
|
+
SkillRegistry ← user · installed · app · builtins
|
|
16
|
+
↓
|
|
17
|
+
SkillManifest (agentsam.skill.v1)
|
|
18
|
+
↓
|
|
19
|
+
SkillContentResolver ← inline | local_file | package_file | database | object_store
|
|
20
|
+
↓
|
|
21
|
+
SkillRuntime.invoke() ← turn-only
|
|
22
|
+
↓
|
|
23
|
+
SkillInvocationResult
|
|
24
|
+
├── modelInstructions ← what the model sees
|
|
25
|
+
├── tools / operations ← declared requirements
|
|
26
|
+
├── interaction ← AgentSamInteraction (Clack / Studio / Tauri)
|
|
27
|
+
└── receipt ← source · version · checksum
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Explicit non-goals (monolith leaks rejected)
|
|
31
|
+
|
|
32
|
+
| Leak | Replacement |
|
|
33
|
+
|------|-------------|
|
|
34
|
+
| `account_id IN ('platform','system')` | Layered registry sources — no pseudo accounts |
|
|
35
|
+
| `ORDER BY account_id = ?` precedence | Install-time trigger map; collisions → alias |
|
|
36
|
+
| Global unique published slash | Package may *suggest*; local registry owns binding |
|
|
37
|
+
| `metadata.pipeline` → subagent profiles | Declared `tools` / `operations` / `capabilities` |
|
|
38
|
+
| `hydrateSkillRowFromR2` | `object_store` adapter (R2 is one driver) |
|
|
39
|
+
| D1-required lookup | Local `~/.agentsam/skills/registry.json` works offline |
|
|
40
|
+
| Empty `promptBlock` | `modelInstructions` ≠ `interaction` |
|
|
41
|
+
| Hyperdrive as “provider” | `accelerator_ref` on retrieval rows |
|
|
42
|
+
| `embedding_model` + `dimensions` on retrieval | `embedding_profile_id` only |
|
|
43
|
+
|
|
44
|
+
### Canonical slash
|
|
45
|
+
|
|
46
|
+
- Parse: `/[a-zA-Z0-9][a-zA-Z0-9-]{0,63}` → store/lookup as **lowercase** `/kebab-case`
|
|
47
|
+
- Normalize on write (`canonicalizeSlashTrigger`); exact match on read
|
|
48
|
+
- Underscores rewritten to dashes at canonicalize time
|
|
49
|
+
|
|
50
|
+
### Registry layers
|
|
51
|
+
|
|
52
|
+
1. **User / installed** (`~/.agentsam/skills/`) — authoritative triggers
|
|
53
|
+
2. **App-provided** (optional inject)
|
|
54
|
+
3. **SDK builtins** (`skills/catalog.json`) — suggested trigger only if free
|
|
55
|
+
|
|
56
|
+
### Interaction contract (`agentsam.interaction.v1`)
|
|
57
|
+
|
|
58
|
+
`ready | needs_input | needs_approval | blocked | complete`
|
|
59
|
+
Prompt kinds: `info | text | select | multiselect | confirm | error`
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Migration report (IAM → portable)
|
|
64
|
+
|
|
65
|
+
IAM cutover `0011_*` remains host storage. Portable runtime does **not** depend on it.
|
|
66
|
+
|
|
67
|
+
| IAM today | Portable SDK | Host migration later |
|
|
68
|
+
|-----------|--------------|----------------------|
|
|
69
|
+
| Lookup with `platform`/`system` | Delete clause | Hosted SkillStore adapter filters by real `account_id` only |
|
|
70
|
+
| `LOWER(TRIM(slash_trigger))` | Canonical write | Backfill triggers to lowercase kebab; drop expression lookups |
|
|
71
|
+
| Partial unique published slash | Drop global uniqueness | Allow duplicate *suggestions*; enforce uniqueness per install |
|
|
72
|
+
| `metadata.pipeline` + subagents | Remove from slash path | Map declared ops to SAM operations |
|
|
73
|
+
| R2 hydrate in invoke | Content resolver | Register `cloudflare-r2` object_store adapter |
|
|
74
|
+
| Retrieval `provider IN (… hyperdrive …)` | See `migrations/sqlite/agentsam_skill_retrieval.portable.sql` | Split strategy/provider/driver/accelerator |
|
|
75
|
+
| Metrics triggers on `content_markdown` | Compute on resolve/install | Keep trigger only as inline optimization |
|
|
76
|
+
| `promptBlock: ''` | Split fields | Chat adapters render `interaction` |
|
|
77
|
+
|
|
78
|
+
**Hosted ownership:** stay in the **SkillStore adapter**, not in the portable manifest (no `workspace_id` / `tenant_id` on `agentsam.skill.v1`).
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## CLI surface
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
agentsam skill list|create|inspect|edit|install|alias|remove|publish|invoke
|
|
86
|
+
agentsam skills … # legacy catalog reader (SDK built-in markdown skills)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Interactive shell:
|
|
90
|
+
|
|
91
|
+
- `/skills` — vocabulary (no model)
|
|
92
|
+
- `/<trigger> args` — skill invoke when not a hard-coded shell command
|
|
93
|
+
- Unknown `/deply` → suggestions (no model)
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Files added
|
|
98
|
+
|
|
99
|
+
- `protocol/skills/agentsam.skill.v1.schema.json`
|
|
100
|
+
- `protocol/skills/agentsam.interaction.v1.schema.json`
|
|
101
|
+
- `src/skills/{slash,manifest,interaction,metrics,content-resolver,local-store,registry,runtime,index}.js`
|
|
102
|
+
- `src/skills/catalog.js` (renamed from index)
|
|
103
|
+
- `src/commands/skill.js`
|
|
104
|
+
- `migrations/sqlite/agentsam_skill_retrieval.portable.sql`
|
|
105
|
+
- `test/skill-runtime.test.mjs`
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Hosted SkillStore
|
|
110
|
+
|
|
111
|
+
Portable runtime uses `createNullHostedSkillStore()` offline.
|
|
112
|
+
|
|
113
|
+
Hosts inject a real adapter that lists/puts skills **by real `account_id` only**.
|
|
114
|
+
IAM must not keep `account_id IN ('platform','system')` visibility.
|
|
115
|
+
|
|
116
|
+
See `src/skills/hosted-store.js`.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "agentsam.fs-e2e-receipt.v1",
|
|
3
|
+
"complete": true,
|
|
4
|
+
"root": "/var/folders/4s/05_wctw12k33szskjcfrr1bc0000gn/T/agentsam-fs-e2e-SUSpQa",
|
|
5
|
+
"workspace_id": "ws_ce3df666a4cef739031b",
|
|
6
|
+
"runtimeBaseUrl": "http://127.0.0.1:65149",
|
|
7
|
+
"pty_session_id": "pty_mugpalql_x93808",
|
|
8
|
+
"monaco_path": "README.md",
|
|
9
|
+
"monaco_marker": "MONACO_MARK_1790325024020",
|
|
10
|
+
"git_diff_snippet": "\r\nThe default interactive shell is now zsh.\r\nTo update your account to use zsh, please run `chsh -s /bin/zsh`.\r\nFor more details, please visit https://support.apple.com/kb/HT208050.\r\n\u001b[?1034hbash-3.2$ git diff -- README.md; echo MONACO_MARK_DONE\r\n\u001b[?1h\u001b=\r\u001b[1mdiff --git a/README.md b/README.md\u001b[m\u001b[m\r\n\u001b[1mindex aa5699e..342a7bb 100644\u001b[m\u001b[m\r\n\u001b[1m--- a/README.md\u001b[m\u001b[m\r\n\u001b[1m+++ b/README.md\u001b[m\u001b[m\r\n\u001b[36m@@ -1 +1,3 @@\u001b[m\u001b[m\r\n # disposable\u001b[m\u001b[m\r\n\u001b[32m+\u001b[m\u001b[m\r\n\u001b[32m+\u001b[m\u001b[32m## MONACO_MARK_1790325024020\u001b[m\u001b[m\r\n\r\u001b[K\u001b[?1l\u001b>MONACO_MARK_DONE\r\nbash-3.2$ ",
|
|
11
|
+
"identity": {
|
|
12
|
+
"type": "workspace_identity",
|
|
13
|
+
"workspace_id": "ws_ce3df666a4cef739031b",
|
|
14
|
+
"root": "/var/folders/4s/05_wctw12k33szskjcfrr1bc0000gn/T/agentsam-fs-e2e-SUSpQa",
|
|
15
|
+
"session_cwd": "/var/folders/4s/05_wctw12k33szskjcfrr1bc0000gn/T/agentsam-fs-e2e-SUSpQa",
|
|
16
|
+
"session_id": "pty_mugpalql_x93808",
|
|
17
|
+
"runtimeBaseUrl": "http://127.0.0.1:65149"
|
|
18
|
+
},
|
|
19
|
+
"pty_path": "NOTES.md",
|
|
20
|
+
"pty_marker": "PTY_MARK_1790325024020",
|
|
21
|
+
"stale_conflict": {
|
|
22
|
+
"ok": false,
|
|
23
|
+
"error": "version_conflict",
|
|
24
|
+
"code": "version_conflict",
|
|
25
|
+
"expected": "sha256:2b92ea252be0fbc26f70317cdaa7b6411ea634b50d55338cd8c495e4dbf25d1d",
|
|
26
|
+
"actual": "sha256:95e5f36ba91fce6c51078ba4948aa068fa9e33e213504318dfeea0ea80ece986",
|
|
27
|
+
"path": "NOTES.md"
|
|
28
|
+
},
|
|
29
|
+
"external_version_before": "sha256:2b92ea252be0fbc26f70317cdaa7b6411ea634b50d55338cd8c495e4dbf25d1d",
|
|
30
|
+
"external_version_after": "sha256:95e5f36ba91fce6c51078ba4948aa068fa9e33e213504318dfeea0ea80ece986",
|
|
31
|
+
"authorization": {
|
|
32
|
+
"binding": "127.0.0.1",
|
|
33
|
+
"capability_required": true,
|
|
34
|
+
"cors": "studio-origin-allowlist",
|
|
35
|
+
"arbitrary_root_claim": "rejected"
|
|
36
|
+
},
|
|
37
|
+
"scratch_vs_filesystem": {
|
|
38
|
+
"filesystem": "real FS + real PTY",
|
|
39
|
+
"scratch": "virtual files + virtual shell",
|
|
40
|
+
"silent_fallback": false
|
|
41
|
+
}
|
|
42
|
+
}
|