@bradygaster/squad-sdk 0.9.1 → 0.9.2-insider.1
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/README.md +340 -296
- package/dist/agents/history-shadow.d.ts +7 -5
- package/dist/agents/history-shadow.d.ts.map +1 -1
- package/dist/agents/history-shadow.js +69 -78
- package/dist/agents/history-shadow.js.map +1 -1
- package/dist/agents/index.d.ts +12 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +62 -9
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/lifecycle.d.ts +4 -0
- package/dist/agents/lifecycle.d.ts.map +1 -1
- package/dist/agents/lifecycle.js +6 -7
- package/dist/agents/lifecycle.js.map +1 -1
- package/dist/agents/onboarding.d.ts +4 -2
- package/dist/agents/onboarding.d.ts.map +1 -1
- package/dist/agents/onboarding.js +26 -16
- package/dist/agents/onboarding.js.map +1 -1
- package/dist/agents/personal.d.ts +2 -1
- package/dist/agents/personal.d.ts.map +1 -1
- package/dist/agents/personal.js +11 -12
- package/dist/agents/personal.js.map +1 -1
- package/dist/build/bundle.d.ts.map +1 -1
- package/dist/build/bundle.js +6 -6
- package/dist/build/bundle.js.map +1 -1
- package/dist/build/github-dist.js +42 -42
- package/dist/build/release.d.ts.map +1 -1
- package/dist/build/release.js +7 -5
- package/dist/build/release.js.map +1 -1
- package/dist/casting/index.d.ts.map +1 -1
- package/dist/casting/index.js +4 -3
- package/dist/casting/index.js.map +1 -1
- package/dist/config/agent-source.d.ts +5 -1
- package/dist/config/agent-source.d.ts.map +1 -1
- package/dist/config/agent-source.js +85 -41
- package/dist/config/agent-source.js.map +1 -1
- package/dist/config/init.d.ts +4 -3
- package/dist/config/init.d.ts.map +1 -1
- package/dist/config/init.js +257 -236
- package/dist/config/init.js.map +1 -1
- package/dist/config/legacy-fallback.d.ts +3 -2
- package/dist/config/legacy-fallback.d.ts.map +1 -1
- package/dist/config/legacy-fallback.js +16 -14
- package/dist/config/legacy-fallback.js.map +1 -1
- package/dist/config/models.d.ts +9 -6
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +35 -25
- package/dist/config/models.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/marketplace/packaging.d.ts.map +1 -1
- package/dist/marketplace/packaging.js +18 -16
- package/dist/marketplace/packaging.js.map +1 -1
- package/dist/multi-squad.d.ts.map +1 -1
- package/dist/multi-squad.js +10 -9
- package/dist/multi-squad.js.map +1 -1
- package/dist/platform/comms-file-log.d.ts.map +1 -1
- package/dist/platform/comms-file-log.js +7 -6
- package/dist/platform/comms-file-log.js.map +1 -1
- package/dist/platform/comms.d.ts.map +1 -1
- package/dist/platform/comms.js +6 -5
- package/dist/platform/comms.js.map +1 -1
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +4 -3
- package/dist/platform/index.js.map +1 -1
- package/dist/ralph/capabilities.d.ts +30 -1
- package/dist/ralph/capabilities.d.ts.map +1 -1
- package/dist/ralph/capabilities.js +51 -6
- package/dist/ralph/capabilities.js.map +1 -1
- package/dist/ralph/index.d.ts +1 -1
- package/dist/ralph/index.d.ts.map +1 -1
- package/dist/ralph/index.js +4 -3
- package/dist/ralph/index.js.map +1 -1
- package/dist/ralph/rate-limiting.d.ts.map +1 -1
- package/dist/ralph/rate-limiting.js +4 -4
- package/dist/ralph/rate-limiting.js.map +1 -1
- package/dist/remote/bridge.d.ts.map +1 -1
- package/dist/remote/bridge.js +2 -2
- package/dist/remote/bridge.js.map +1 -1
- package/dist/resolution.d.ts +9 -0
- package/dist/resolution.d.ts.map +1 -1
- package/dist/resolution.js +39 -16
- package/dist/resolution.js.map +1 -1
- package/dist/roles/catalog.d.ts +1 -1
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +8 -7
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/cross-squad.d.ts.map +1 -1
- package/dist/runtime/cross-squad.js +8 -7
- package/dist/runtime/cross-squad.js.map +1 -1
- package/dist/runtime/scheduler.d.ts.map +1 -1
- package/dist/runtime/scheduler.js +8 -8
- package/dist/runtime/scheduler.js.map +1 -1
- package/dist/runtime/squad-observer.d.ts.map +1 -1
- package/dist/runtime/squad-observer.js +7 -4
- package/dist/runtime/squad-observer.js.map +1 -1
- package/dist/sharing/consult.d.ts +1 -1
- package/dist/sharing/consult.d.ts.map +1 -1
- package/dist/sharing/consult.js +144 -142
- package/dist/sharing/consult.js.map +1 -1
- package/dist/sharing/export.d.ts.map +1 -1
- package/dist/sharing/export.js +16 -16
- package/dist/sharing/export.js.map +1 -1
- package/dist/sharing/import.d.ts.map +1 -1
- package/dist/sharing/import.js +13 -12
- package/dist/sharing/import.js.map +1 -1
- package/dist/skills/skill-loader.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +10 -9
- package/dist/skills/skill-loader.js.map +1 -1
- package/dist/skills/skill-script-loader.d.ts.map +1 -1
- package/dist/skills/skill-script-loader.js +6 -4
- package/dist/skills/skill-script-loader.js.map +1 -1
- package/dist/skills/skill-source.d.ts +3 -1
- package/dist/skills/skill-source.d.ts.map +1 -1
- package/dist/skills/skill-source.js +18 -16
- package/dist/skills/skill-source.js.map +1 -1
- package/dist/state/collection-map.d.ts +43 -0
- package/dist/state/collection-map.d.ts.map +1 -0
- package/dist/state/collection-map.js +9 -0
- package/dist/state/collection-map.js.map +1 -0
- package/dist/state/collections.d.ts +102 -0
- package/dist/state/collections.d.ts.map +1 -0
- package/dist/state/collections.js +317 -0
- package/dist/state/collections.js.map +1 -0
- package/dist/state/domain-types.d.ts +122 -0
- package/dist/state/domain-types.d.ts.map +1 -0
- package/dist/state/domain-types.js +54 -0
- package/dist/state/domain-types.js.map +1 -0
- package/dist/state/handles.d.ts +16 -0
- package/dist/state/handles.d.ts.map +1 -0
- package/dist/state/handles.js +161 -0
- package/dist/state/handles.js.map +1 -0
- package/dist/state/index.d.ts +17 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +15 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/io/charter-io.d.ts +28 -0
- package/dist/state/io/charter-io.d.ts.map +1 -0
- package/dist/state/io/charter-io.js +94 -0
- package/dist/state/io/charter-io.js.map +1 -0
- package/dist/state/io/decisions-io.d.ts +42 -0
- package/dist/state/io/decisions-io.d.ts.map +1 -0
- package/dist/state/io/decisions-io.js +66 -0
- package/dist/state/io/decisions-io.js.map +1 -0
- package/dist/state/io/history-io.d.ts +37 -0
- package/dist/state/io/history-io.d.ts.map +1 -0
- package/dist/state/io/history-io.js +102 -0
- package/dist/state/io/history-io.js.map +1 -0
- package/dist/state/io/index.d.ts +19 -0
- package/dist/state/io/index.d.ts.map +1 -0
- package/dist/state/io/index.js +19 -0
- package/dist/state/io/index.js.map +1 -0
- package/dist/state/io/routing-io.d.ts +37 -0
- package/dist/state/io/routing-io.d.ts.map +1 -0
- package/dist/state/io/routing-io.js +99 -0
- package/dist/state/io/routing-io.js.map +1 -0
- package/dist/state/io/team-io.d.ts +46 -0
- package/dist/state/io/team-io.d.ts.map +1 -0
- package/dist/state/io/team-io.js +82 -0
- package/dist/state/io/team-io.js.map +1 -0
- package/dist/state/schema.d.ts +24 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/schema.js +41 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/squad-state.d.ts +42 -0
- package/dist/state/squad-state.d.ts.map +1 -0
- package/dist/state/squad-state.js +68 -0
- package/dist/state/squad-state.js.map +1 -0
- package/dist/storage/fs-storage-provider.d.ts +60 -0
- package/dist/storage/fs-storage-provider.d.ts.map +1 -0
- package/dist/storage/fs-storage-provider.js +377 -0
- package/dist/storage/fs-storage-provider.js.map +1 -0
- package/dist/storage/in-memory-storage-provider.d.ts +46 -0
- package/dist/storage/in-memory-storage-provider.d.ts.map +1 -0
- package/dist/storage/in-memory-storage-provider.js +264 -0
- package/dist/storage/in-memory-storage-provider.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/sqlite-storage-provider.d.ts +95 -0
- package/dist/storage/sqlite-storage-provider.d.ts.map +1 -0
- package/dist/storage/sqlite-storage-provider.js +383 -0
- package/dist/storage/sqlite-storage-provider.js.map +1 -0
- package/dist/storage/storage-error.d.ts +28 -0
- package/dist/storage/storage-error.d.ts.map +1 -0
- package/dist/storage/storage-error.js +35 -0
- package/dist/storage/storage-error.js.map +1 -0
- package/dist/storage/storage-provider.d.ts +161 -0
- package/dist/storage/storage-provider.d.ts.map +1 -0
- package/dist/storage/storage-provider.js +18 -0
- package/dist/storage/storage-provider.js.map +1 -0
- package/dist/streams/resolver.d.ts.map +1 -1
- package/dist/streams/resolver.js +6 -5
- package/dist/streams/resolver.js.map +1 -1
- package/dist/tools/index.d.ts +5 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +54 -15
- package/dist/tools/index.js.map +1 -1
- package/dist/upstream/resolver.d.ts +3 -2
- package/dist/upstream/resolver.d.ts.map +1 -1
- package/dist/upstream/resolver.js +33 -32
- package/dist/upstream/resolver.js.map +1 -1
- package/package.json +33 -1
- package/templates/casting/Futurama.json +9 -9
- package/templates/casting-history.json +4 -4
- package/templates/casting-policy.json +37 -37
- package/templates/casting-reference.md +104 -104
- package/templates/casting-registry.json +3 -3
- package/templates/ceremonies.md +41 -41
- package/templates/charter.md +53 -53
- package/templates/constraint-tracking.md +38 -38
- package/templates/cooperative-rate-limiting.md +229 -229
- package/templates/copilot-instructions.md +46 -46
- package/templates/history.md +10 -10
- package/templates/identity/now.md +9 -9
- package/templates/identity/wisdom.md +15 -15
- package/templates/issue-lifecycle.md +412 -412
- package/templates/keda-scaler.md +164 -164
- package/templates/machine-capabilities.md +74 -74
- package/templates/mcp-config.md +90 -90
- package/templates/multi-agent-format.md +28 -28
- package/templates/plugin-marketplace.md +49 -49
- package/templates/ralph-circuit-breaker.md +313 -313
- package/templates/raw-agent-output.md +37 -37
- package/templates/roster.md +60 -60
- package/templates/routing.md +39 -39
- package/templates/run-output.md +50 -50
- package/templates/schedule.json +19 -19
- package/templates/scribe-charter.md +123 -119
- package/templates/skill.md +24 -24
- package/templates/skills/agent-collaboration/SKILL.md +42 -42
- package/templates/skills/agent-conduct/SKILL.md +24 -24
- package/templates/skills/architectural-proposals/SKILL.md +151 -151
- package/templates/skills/ci-validation-gates/SKILL.md +84 -84
- package/templates/skills/cli-wiring/SKILL.md +47 -47
- package/templates/skills/client-compatibility/SKILL.md +89 -89
- package/templates/skills/cross-machine-coordination/SKILL.md +434 -0
- package/templates/skills/cross-squad/SKILL.md +114 -114
- package/templates/skills/distributed-mesh/SKILL.md +287 -287
- package/templates/skills/distributed-mesh/mesh.json.example +30 -30
- package/templates/skills/distributed-mesh/sync-mesh.ps1 +111 -111
- package/templates/skills/distributed-mesh/sync-mesh.sh +104 -104
- package/templates/skills/docs-standards/SKILL.md +71 -71
- package/templates/skills/economy-mode/SKILL.md +114 -114
- package/templates/skills/error-recovery/SKILL.md +99 -0
- package/templates/skills/external-comms/SKILL.md +329 -329
- package/templates/skills/gh-auth-isolation/SKILL.md +183 -183
- package/templates/skills/git-workflow/SKILL.md +204 -204
- package/templates/skills/github-multi-account/SKILL.md +95 -95
- package/templates/skills/history-hygiene/SKILL.md +36 -36
- package/templates/skills/humanizer/SKILL.md +105 -105
- package/templates/skills/init-mode/SKILL.md +102 -102
- package/templates/skills/iterative-retrieval/SKILL.md +165 -0
- package/templates/skills/model-selection/SKILL.md +117 -117
- package/templates/skills/nap/SKILL.md +24 -24
- package/templates/skills/notification-routing/SKILL.md +105 -0
- package/templates/skills/personal-squad/SKILL.md +57 -57
- package/templates/skills/pr-screenshots/SKILL.md +149 -0
- package/templates/skills/project-conventions/SKILL.md +56 -56
- package/templates/skills/ralph-two-pass-scan/SKILL.md +35 -0
- package/templates/skills/reflect/SKILL.md +229 -0
- package/templates/skills/release-process/SKILL.md +131 -423
- package/templates/skills/reskill/SKILL.md +92 -92
- package/templates/skills/retro-enforcement/SKILL.md +148 -0
- package/templates/skills/reviewer-protocol/SKILL.md +79 -79
- package/templates/skills/secret-handling/SKILL.md +200 -200
- package/templates/skills/session-recovery/SKILL.md +155 -155
- package/templates/skills/squad-conventions/SKILL.md +69 -69
- package/templates/skills/test-discipline/SKILL.md +37 -37
- package/templates/skills/tiered-memory/SKILL.md +234 -0
- package/templates/skills/windows-compatibility/SKILL.md +98 -74
- package/templates/{squad.agent.md → squad.agent.md.template} +57 -28
- package/templates/workflows/squad-ci.yml +24 -24
- package/templates/workflows/squad-docs.yml +54 -54
- package/templates/workflows/squad-heartbeat.yml +167 -171
- package/templates/workflows/squad-insider-release.yml +61 -61
- package/templates/workflows/squad-issue-assign.yml +161 -161
- package/templates/workflows/squad-label-enforce.yml +181 -181
- package/templates/workflows/squad-preview.yml +55 -55
- package/templates/workflows/squad-promote.yml +120 -120
- package/templates/workflows/squad-release.yml +77 -77
- package/templates/workflows/squad-triage.yml +260 -260
- package/templates/workflows/sync-squad-labels.yml +169 -169
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,eAAe,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ const require = createRequire(import.meta.url);
|
|
|
8
8
|
const pkg = require('../package.json');
|
|
9
9
|
export const VERSION = pkg.version;
|
|
10
10
|
// Export public API
|
|
11
|
-
export { resolveSquad, resolveGlobalSquadPath, resolvePersonalSquadDir, ensureSquadPath, ensureSquadPathTriple, loadDirConfig, isConsultMode } from './resolution.js';
|
|
11
|
+
export { resolveSquad, resolveGlobalSquadPath, resolvePersonalSquadDir, ensurePersonalSquadDir, ensureSquadPath, ensureSquadPathTriple, loadDirConfig, isConsultMode } from './resolution.js';
|
|
12
12
|
export * from './config/index.js';
|
|
13
13
|
export * from './agents/onboarding.js';
|
|
14
14
|
export { resolvePersonalAgents, mergeSessionCast } from './agents/personal.js';
|
|
@@ -41,4 +41,17 @@ export { defineTeam, defineAgent, defineBudget, defineRouting, defineCeremony, d
|
|
|
41
41
|
// Base Roles (built-in role catalog)
|
|
42
42
|
export * from './roles/index.js';
|
|
43
43
|
export * from './platform/index.js';
|
|
44
|
+
export * from './storage/index.js';
|
|
45
|
+
// State facade (Phase 2) — namespaced to avoid conflicts with existing config/sharing exports
|
|
46
|
+
export {
|
|
47
|
+
// Error classes
|
|
48
|
+
StateError, NotFoundError, ParseError, WriteConflictError, ProviderError,
|
|
49
|
+
// Schema
|
|
50
|
+
COLLECTION_PATHS, resolveCollectionPath,
|
|
51
|
+
// Handle factory
|
|
52
|
+
createAgentHandle,
|
|
53
|
+
// Collection facades
|
|
54
|
+
AgentsCollection, ConfigCollection, DecisionsCollection, LogCollection, RoutingCollection, SkillsCollection, TeamCollection, TemplatesCollection,
|
|
55
|
+
// Top-level facade
|
|
56
|
+
SquadState, } from './state/index.js';
|
|
44
57
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAE3C,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,eAAe,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAE3C,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE9L,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEvE,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAQL,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAEnC,2CAA2C;AAC3C,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAqB7B,qCAAqC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC,8FAA8F;AAC9F,OAAO;AACL,gBAAgB;AAChB,UAAU,EACV,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,aAAa;AACb,SAAS;AACT,gBAAgB,EAChB,qBAAqB;AACrB,iBAAiB;AACjB,iBAAiB;AACjB,qBAAqB;AACrB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,mBAAmB;AACnB,mBAAmB;AACnB,UAAU,GACX,MAAM,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packaging.d.ts","sourceRoot":"","sources":["../../src/marketplace/packaging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"packaging.d.ts","sourceRoot":"","sources":["../../src/marketplace/packaging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAMtD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID,MAAM,WAAW,kCAAkC;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,mBAAmB,GAC5B,aAAa,CAwDf;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,kCAAkC,CA0C/F"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Packaging utilities — prepare Squad projects for marketplace distribution
|
|
3
3
|
* Issue #108 (M4-8)
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
5
|
+
import { FSStorageProvider } from '../storage/fs-storage-provider.js';
|
|
6
6
|
import * as path from 'node:path';
|
|
7
|
+
const storage = new FSStorageProvider();
|
|
7
8
|
const REQUIRED_FILES = ['manifest.json', 'README.md'];
|
|
8
9
|
const REQUIRED_PATHS = ['icon', 'dist/'];
|
|
9
10
|
/**
|
|
@@ -12,16 +13,16 @@ const REQUIRED_PATHS = ['icon', 'dist/'];
|
|
|
12
13
|
export function packageForMarketplace(projectDir, manifest) {
|
|
13
14
|
const warnings = [];
|
|
14
15
|
const files = [];
|
|
15
|
-
if (!
|
|
16
|
+
if (!storage.existsSync(projectDir)) {
|
|
16
17
|
throw new Error(`Project directory not found: ${projectDir}`);
|
|
17
18
|
}
|
|
18
19
|
// Write manifest.json
|
|
19
20
|
const manifestPath = path.join(projectDir, 'manifest.json');
|
|
20
|
-
|
|
21
|
+
storage.writeSync(manifestPath, JSON.stringify(manifest, null, 2));
|
|
21
22
|
files.push('manifest.json');
|
|
22
23
|
// Collect README
|
|
23
24
|
const readmePath = path.join(projectDir, 'README.md');
|
|
24
|
-
if (
|
|
25
|
+
if (storage.existsSync(readmePath)) {
|
|
25
26
|
files.push('README.md');
|
|
26
27
|
}
|
|
27
28
|
else {
|
|
@@ -29,7 +30,7 @@ export function packageForMarketplace(projectDir, manifest) {
|
|
|
29
30
|
}
|
|
30
31
|
// Collect icon
|
|
31
32
|
const iconPath = path.join(projectDir, manifest.icon);
|
|
32
|
-
if (
|
|
33
|
+
if (storage.existsSync(iconPath)) {
|
|
33
34
|
files.push(manifest.icon);
|
|
34
35
|
}
|
|
35
36
|
else {
|
|
@@ -37,7 +38,7 @@ export function packageForMarketplace(projectDir, manifest) {
|
|
|
37
38
|
}
|
|
38
39
|
// Collect dist/
|
|
39
40
|
const distDir = path.join(projectDir, 'dist');
|
|
40
|
-
if (
|
|
41
|
+
if (storage.existsSync(distDir) && storage.isDirectorySync(distDir)) {
|
|
41
42
|
const distFiles = collectFiles(distDir, 'dist');
|
|
42
43
|
files.push(...distFiles);
|
|
43
44
|
}
|
|
@@ -48,8 +49,9 @@ export function packageForMarketplace(projectDir, manifest) {
|
|
|
48
49
|
let totalSize = 0;
|
|
49
50
|
for (const file of files) {
|
|
50
51
|
const fullPath = path.join(projectDir, file);
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
const st = storage.statSync(fullPath);
|
|
53
|
+
if (st && !st.isDirectory) {
|
|
54
|
+
totalSize += st.size;
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
57
|
const outputPath = path.join(projectDir, `${manifest.name}-${manifest.version}.squad-pkg`);
|
|
@@ -66,7 +68,7 @@ export function packageForMarketplace(projectDir, manifest) {
|
|
|
66
68
|
export function validatePackageContents(packagePath) {
|
|
67
69
|
const errors = [];
|
|
68
70
|
const missingFiles = [];
|
|
69
|
-
if (!
|
|
71
|
+
if (!storage.existsSync(packagePath)) {
|
|
70
72
|
return {
|
|
71
73
|
valid: false,
|
|
72
74
|
errors: [`Package path not found: ${packagePath}`],
|
|
@@ -75,20 +77,20 @@ export function validatePackageContents(packagePath) {
|
|
|
75
77
|
}
|
|
76
78
|
for (const file of REQUIRED_FILES) {
|
|
77
79
|
const filePath = path.join(packagePath, file);
|
|
78
|
-
if (!
|
|
80
|
+
if (!storage.existsSync(filePath)) {
|
|
79
81
|
missingFiles.push(file);
|
|
80
82
|
errors.push(`Required file missing: ${file}`);
|
|
81
83
|
}
|
|
82
84
|
}
|
|
83
85
|
// Check dist/ directory exists
|
|
84
86
|
const distDir = path.join(packagePath, 'dist');
|
|
85
|
-
if (!
|
|
87
|
+
if (!storage.existsSync(distDir) || !storage.isDirectorySync(distDir)) {
|
|
86
88
|
missingFiles.push('dist/');
|
|
87
89
|
errors.push('Required directory missing: dist/');
|
|
88
90
|
}
|
|
89
91
|
// Check icon — look for any common image file
|
|
90
92
|
const iconCandidates = ['icon.png', 'icon.svg', 'icon.jpg'];
|
|
91
|
-
const hasIcon = iconCandidates.some((ic) =>
|
|
93
|
+
const hasIcon = iconCandidates.some((ic) => storage.existsSync(path.join(packagePath, ic)));
|
|
92
94
|
if (!hasIcon) {
|
|
93
95
|
missingFiles.push('icon');
|
|
94
96
|
errors.push('Required file missing: icon (icon.png, icon.svg, or icon.jpg)');
|
|
@@ -102,11 +104,11 @@ export function validatePackageContents(packagePath) {
|
|
|
102
104
|
// --- Internal helpers ---
|
|
103
105
|
function collectFiles(dir, prefix) {
|
|
104
106
|
const results = [];
|
|
105
|
-
const entries =
|
|
107
|
+
const entries = storage.listSync(dir);
|
|
106
108
|
for (const entry of entries) {
|
|
107
|
-
const rel = path.join(prefix, entry
|
|
108
|
-
if (
|
|
109
|
-
results.push(...collectFiles(path.join(dir, entry
|
|
109
|
+
const rel = path.join(prefix, entry);
|
|
110
|
+
if (storage.isDirectorySync(path.join(dir, entry))) {
|
|
111
|
+
results.push(...collectFiles(path.join(dir, entry), rel));
|
|
110
112
|
}
|
|
111
113
|
else {
|
|
112
114
|
results.push(rel);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packaging.js","sourceRoot":"","sources":["../../src/marketplace/packaging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"packaging.js","sourceRoot":"","sources":["../../src/marketplace/packaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-squad.d.ts","sourceRoot":"","sources":["../src/multi-squad.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"multi-squad.d.ts","sourceRoot":"","sources":["../src/multi-squad.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AA8DD;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAuBtD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,EAAE,CAUxC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAyBhD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAwB9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAc9C;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAoCzC"}
|
package/dist/multi-squad.js
CHANGED
|
@@ -14,9 +14,10 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @module multi-squad
|
|
16
16
|
*/
|
|
17
|
-
import fs from 'node:fs';
|
|
18
17
|
import path from 'node:path';
|
|
18
|
+
import { FSStorageProvider } from './storage/fs-storage-provider.js';
|
|
19
19
|
import { resolveGlobalSquadPath } from './resolution.js';
|
|
20
|
+
const storage = new FSStorageProvider();
|
|
20
21
|
// ============================================================================
|
|
21
22
|
// Constants
|
|
22
23
|
// ============================================================================
|
|
@@ -34,11 +35,11 @@ function squadsJsonPath() {
|
|
|
34
35
|
/** Read and parse squads.json, returning null if missing or malformed. */
|
|
35
36
|
function loadSquadsConfig() {
|
|
36
37
|
const configPath = squadsJsonPath();
|
|
37
|
-
if (!
|
|
38
|
+
if (!storage.existsSync(configPath)) {
|
|
38
39
|
return null;
|
|
39
40
|
}
|
|
40
41
|
try {
|
|
41
|
-
const raw =
|
|
42
|
+
const raw = storage.readSync(configPath) ?? '';
|
|
42
43
|
const parsed = JSON.parse(raw);
|
|
43
44
|
if (parsed !== null &&
|
|
44
45
|
typeof parsed === 'object' &&
|
|
@@ -57,7 +58,7 @@ function loadSquadsConfig() {
|
|
|
57
58
|
/** Write squads.json atomically. */
|
|
58
59
|
function saveSquadsConfig(config) {
|
|
59
60
|
const configPath = squadsJsonPath();
|
|
60
|
-
|
|
61
|
+
storage.writeSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
61
62
|
}
|
|
62
63
|
/** Validate a squad name: non-empty, no slashes, no dots-only. */
|
|
63
64
|
function validateName(name) {
|
|
@@ -138,7 +139,7 @@ export function createSquad(name) {
|
|
|
138
139
|
throw new Error(`Squad "${name}" already exists.`);
|
|
139
140
|
}
|
|
140
141
|
const squadDir = path.join(getSquadRoot(), SQUADS_DIR, name);
|
|
141
|
-
|
|
142
|
+
storage.mkdirSync(squadDir, { recursive: true });
|
|
142
143
|
config.squads.push({
|
|
143
144
|
name,
|
|
144
145
|
path: squadDir,
|
|
@@ -166,8 +167,8 @@ export function deleteSquad(name) {
|
|
|
166
167
|
throw new Error(`Squad "${name}" not found.`);
|
|
167
168
|
}
|
|
168
169
|
const entry = config.squads[idx];
|
|
169
|
-
if (entry &&
|
|
170
|
-
|
|
170
|
+
if (entry && storage.existsSync(entry.path)) {
|
|
171
|
+
storage.deleteDirSync(entry.path);
|
|
171
172
|
}
|
|
172
173
|
config.squads.splice(idx, 1);
|
|
173
174
|
saveSquadsConfig(config);
|
|
@@ -201,13 +202,13 @@ export function migrateIfNeeded() {
|
|
|
201
202
|
const root = getSquadRoot();
|
|
202
203
|
const configPath = path.join(root, SQUADS_JSON);
|
|
203
204
|
// If squads.json already exists, no migration needed
|
|
204
|
-
if (
|
|
205
|
+
if (storage.existsSync(configPath)) {
|
|
205
206
|
return false;
|
|
206
207
|
}
|
|
207
208
|
// Check for legacy ~/.squad directory
|
|
208
209
|
const home = process.env['HOME'] ?? process.env['USERPROFILE'] ?? '';
|
|
209
210
|
const legacyDir = path.join(home, LEGACY_DIR);
|
|
210
|
-
if (!home || !
|
|
211
|
+
if (!home || !storage.existsSync(legacyDir) || !storage.isDirectorySync(legacyDir)) {
|
|
211
212
|
// No legacy layout — bootstrap empty config
|
|
212
213
|
const config = {
|
|
213
214
|
squads: [],
|
package/dist/multi-squad.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-squad.js","sourceRoot":"","sources":["../src/multi-squad.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"multi-squad.js","sourceRoot":"","sources":["../src/multi-squad.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comms-file-log.d.ts","sourceRoot":"","sources":["../../src/platform/comms-file-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"comms-file-log.d.ts","sourceRoot":"","sources":["../../src/platform/comms-file-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIjG,qBAAa,2BAA4B,YAAW,oBAAoB;IAI1D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAc;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEL,SAAS,EAAE,MAAM;IAOxC,UAAU,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA4BnC,cAAc,CAAC,OAAO,EAAE;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,IAAI,CAAC;KACb,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAqBjC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG1D"}
|
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module platform/comms-file-log
|
|
9
9
|
*/
|
|
10
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
11
10
|
import { join } from 'node:path';
|
|
11
|
+
import { FSStorageProvider } from '../storage/fs-storage-provider.js';
|
|
12
12
|
import { safeTimestamp } from '../utils/safe-timestamp.js';
|
|
13
|
+
const storage = new FSStorageProvider();
|
|
13
14
|
export class FileLogCommunicationAdapter {
|
|
14
15
|
squadRoot;
|
|
15
16
|
channel = 'file-log';
|
|
@@ -17,8 +18,8 @@ export class FileLogCommunicationAdapter {
|
|
|
17
18
|
constructor(squadRoot) {
|
|
18
19
|
this.squadRoot = squadRoot;
|
|
19
20
|
this.commsDir = join(squadRoot, '.squad', 'comms');
|
|
20
|
-
if (!existsSync(this.commsDir)) {
|
|
21
|
-
mkdirSync(this.commsDir, { recursive: true });
|
|
21
|
+
if (!storage.existsSync(this.commsDir)) {
|
|
22
|
+
storage.mkdirSync(this.commsDir, { recursive: true });
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
async postUpdate(options) {
|
|
@@ -42,14 +43,14 @@ export class FileLogCommunicationAdapter {
|
|
|
42
43
|
'<!-- Replies: add your response below this line -->',
|
|
43
44
|
'',
|
|
44
45
|
].join('\n');
|
|
45
|
-
|
|
46
|
+
storage.writeSync(filepath, content);
|
|
46
47
|
return { id: filename.replace(/\.md$/, ''), url: undefined };
|
|
47
48
|
}
|
|
48
49
|
async pollForReplies(options) {
|
|
49
50
|
const filepath = join(this.commsDir, `${options.threadId}.md`);
|
|
50
|
-
if (!existsSync(filepath))
|
|
51
|
+
if (!storage.existsSync(filepath))
|
|
51
52
|
return [];
|
|
52
|
-
const content =
|
|
53
|
+
const content = storage.readSync(filepath) ?? '';
|
|
53
54
|
const replyMarker = '<!-- Replies: add your response below this line -->';
|
|
54
55
|
const markerIdx = content.indexOf(replyMarker);
|
|
55
56
|
if (markerIdx === -1)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comms-file-log.js","sourceRoot":"","sources":["../../src/platform/comms-file-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"comms-file-log.js","sourceRoot":"","sources":["../../src/platform/comms-file-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comms.d.ts","sourceRoot":"","sources":["../../src/platform/comms.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAA6C,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"comms.d.ts","sourceRoot":"","sources":["../../src/platform/comms.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAA6C,MAAM,YAAY,CAAC;AAwBlG;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAyCjF"}
|
package/dist/platform/comms.js
CHANGED
|
@@ -6,21 +6,22 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module platform/comms
|
|
8
8
|
*/
|
|
9
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
10
9
|
import { join } from 'node:path';
|
|
10
|
+
import { FSStorageProvider } from '../storage/fs-storage-provider.js';
|
|
11
11
|
import { FileLogCommunicationAdapter } from './comms-file-log.js';
|
|
12
12
|
import { GitHubDiscussionsCommunicationAdapter } from './comms-github-discussions.js';
|
|
13
13
|
import { ADODiscussionCommunicationAdapter } from './comms-ado-discussions.js';
|
|
14
14
|
import { detectPlatform, getRemoteUrl, parseGitHubRemote, parseAzureDevOpsRemote } from './detect.js';
|
|
15
|
+
const storage = new FSStorageProvider();
|
|
15
16
|
/**
|
|
16
17
|
* Read communication config from `.squad/config.json`.
|
|
17
18
|
*/
|
|
18
19
|
function readCommsConfig(repoRoot) {
|
|
19
20
|
const configPath = join(repoRoot, '.squad', 'config.json');
|
|
20
|
-
if (!existsSync(configPath))
|
|
21
|
+
if (!storage.existsSync(configPath))
|
|
21
22
|
return undefined;
|
|
22
23
|
try {
|
|
23
|
-
const raw =
|
|
24
|
+
const raw = storage.readSync(configPath) ?? '';
|
|
24
25
|
const parsed = JSON.parse(raw);
|
|
25
26
|
if (parsed.communications && typeof parsed.communications === 'object') {
|
|
26
27
|
return parsed.communications;
|
|
@@ -59,9 +60,9 @@ export function createCommunicationAdapter(repoRoot) {
|
|
|
59
60
|
const configPath = join(repoRoot, '.squad', 'config.json');
|
|
60
61
|
let adoOrg = info.org;
|
|
61
62
|
let adoProject = info.project;
|
|
62
|
-
if (existsSync(configPath)) {
|
|
63
|
+
if (storage.existsSync(configPath)) {
|
|
63
64
|
try {
|
|
64
|
-
const raw =
|
|
65
|
+
const raw = storage.readSync(configPath) ?? '';
|
|
65
66
|
const parsed = JSON.parse(raw);
|
|
66
67
|
const ado = parsed.ado;
|
|
67
68
|
if (ado?.org && typeof ado.org === 'string')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comms.js","sourceRoot":"","sources":["../../src/platform/comms.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"comms.js","sourceRoot":"","sources":["../../src/platform/comms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClN,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnJ,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClN,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnJ,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwBlD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAsBvE"}
|
package/dist/platform/index.js
CHANGED
|
@@ -13,20 +13,21 @@ export { FileLogCommunicationAdapter } from './comms-file-log.js';
|
|
|
13
13
|
export { GitHubDiscussionsCommunicationAdapter } from './comms-github-discussions.js';
|
|
14
14
|
export { ADODiscussionCommunicationAdapter } from './comms-ado-discussions.js';
|
|
15
15
|
export { createCommunicationAdapter } from './comms.js';
|
|
16
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
17
16
|
import { join } from 'node:path';
|
|
17
|
+
import { FSStorageProvider } from '../storage/fs-storage-provider.js';
|
|
18
18
|
import { detectPlatform, getRemoteUrl, parseGitHubRemote, parseAzureDevOpsRemote } from './detect.js';
|
|
19
19
|
import { GitHubAdapter } from './github.js';
|
|
20
20
|
import { AzureDevOpsAdapter } from './azure-devops.js';
|
|
21
|
+
const storage = new FSStorageProvider();
|
|
21
22
|
/**
|
|
22
23
|
* Read ADO work item config from .squad/config.json if present.
|
|
23
24
|
*/
|
|
24
25
|
function readAdoConfig(repoRoot) {
|
|
25
26
|
const configPath = join(repoRoot, '.squad', 'config.json');
|
|
26
|
-
if (!existsSync(configPath))
|
|
27
|
+
if (!storage.existsSync(configPath))
|
|
27
28
|
return undefined;
|
|
28
29
|
try {
|
|
29
|
-
const raw =
|
|
30
|
+
const raw = storage.readSync(configPath) ?? '';
|
|
30
31
|
const parsed = JSON.parse(raw);
|
|
31
32
|
if (parsed.ado && typeof parsed.ado === 'object') {
|
|
32
33
|
return parsed.ado;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnJ,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnJ,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAExC;;GAEG;AACH,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC3D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAC1D,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACjD,OAAO,MAAM,CAAC,GAAwB,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;IACrC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4CAA4C,SAAS,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -7,19 +7,48 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see https://github.com/bradygaster/squad/issues/514
|
|
9
9
|
*/
|
|
10
|
+
/** Deployment mode for capability routing */
|
|
11
|
+
export type DeploymentMode = 'agent-per-node' | 'squad-per-pod';
|
|
10
12
|
/** Machine capability manifest */
|
|
11
13
|
export interface MachineCapabilities {
|
|
12
14
|
machine: string;
|
|
13
15
|
capabilities: string[];
|
|
14
16
|
missing: string[];
|
|
15
17
|
lastUpdated: string;
|
|
18
|
+
/** Pod identifier when running in squad-per-pod mode */
|
|
19
|
+
podId?: string;
|
|
16
20
|
}
|
|
17
21
|
/** Well-known capability identifiers */
|
|
18
22
|
export declare const KNOWN_CAPABILITIES: readonly ["browser", "gpu", "personal-gh", "emu-gh", "azure-cli", "docker", "onedrive", "teams-mcp"];
|
|
19
23
|
export type KnownCapability = typeof KNOWN_CAPABILITIES[number];
|
|
24
|
+
/**
|
|
25
|
+
* Get the deployment mode from the `SQUAD_DEPLOYMENT_MODE` env var.
|
|
26
|
+
* Defaults to `'agent-per-node'` when unset.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getDeploymentMode(): DeploymentMode;
|
|
29
|
+
/**
|
|
30
|
+
* Get the pod identifier from the `SQUAD_POD_ID` env var.
|
|
31
|
+
* Returns `undefined` when unset.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getPodId(): string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Build the path for a pod-specific capabilities manifest.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* generatePodCapabilitiesPath('/app', 'squad-worker-7b4f6')
|
|
39
|
+
* // → '/app/.squad/machine-capabilities-squad-worker-7b4f6.json'
|
|
40
|
+
*/
|
|
41
|
+
export declare function generatePodCapabilitiesPath(teamRoot: string, podId: string): string;
|
|
20
42
|
/**
|
|
21
43
|
* Load machine capabilities from the standard location.
|
|
22
|
-
*
|
|
44
|
+
*
|
|
45
|
+
* When `SQUAD_POD_ID` is set **and** `SQUAD_DEPLOYMENT_MODE` is
|
|
46
|
+
* `squad-per-pod`, the search order becomes:
|
|
47
|
+
* 1. `.squad/machine-capabilities-{podId}.json` (pod-specific)
|
|
48
|
+
* 2. `.squad/machine-capabilities.json` (shared fallback)
|
|
49
|
+
* 3. `~/.squad/machine-capabilities.json` (user home fallback)
|
|
50
|
+
*
|
|
51
|
+
* Otherwise (default `agent-per-node` mode):
|
|
23
52
|
* 1. `.squad/machine-capabilities.json` in the team root
|
|
24
53
|
* 2. `~/.squad/machine-capabilities.json` in the user home
|
|
25
54
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/ralph/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/ralph/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAEhE,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wCAAwC;AACxC,eAAO,MAAM,kBAAkB,sGASrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAKhE;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAIlD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA+BrC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAIvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,EAAE,mBAAmB,GAAG,IAAI,GACvC;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAqB/D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,EAC3E,MAAM,EAAE,CAAC,EAAE,EACX,YAAY,EAAE,mBAAmB,GAAG,IAAI,GACvC;IAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CAAE,CAgB9D"}
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see https://github.com/bradygaster/squad/issues/514
|
|
9
9
|
*/
|
|
10
|
-
import { readFile } from 'node:fs/promises';
|
|
11
|
-
import { existsSync } from 'node:fs';
|
|
12
10
|
import path from 'node:path';
|
|
11
|
+
import { FSStorageProvider } from '../storage/fs-storage-provider.js';
|
|
12
|
+
const storage = new FSStorageProvider();
|
|
13
13
|
import os from 'node:os';
|
|
14
14
|
/** Well-known capability identifiers */
|
|
15
15
|
export const KNOWN_CAPABILITIES = [
|
|
@@ -24,9 +24,43 @@ export const KNOWN_CAPABILITIES = [
|
|
|
24
24
|
];
|
|
25
25
|
/** Prefix for capability requirement labels */
|
|
26
26
|
const NEEDS_PREFIX = 'needs:';
|
|
27
|
+
/**
|
|
28
|
+
* Get the deployment mode from the `SQUAD_DEPLOYMENT_MODE` env var.
|
|
29
|
+
* Defaults to `'agent-per-node'` when unset.
|
|
30
|
+
*/
|
|
31
|
+
export function getDeploymentMode() {
|
|
32
|
+
const raw = process.env.SQUAD_DEPLOYMENT_MODE;
|
|
33
|
+
if (raw === 'squad-per-pod')
|
|
34
|
+
return 'squad-per-pod';
|
|
35
|
+
return 'agent-per-node';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the pod identifier from the `SQUAD_POD_ID` env var.
|
|
39
|
+
* Returns `undefined` when unset.
|
|
40
|
+
*/
|
|
41
|
+
export function getPodId() {
|
|
42
|
+
return process.env.SQUAD_POD_ID || undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Build the path for a pod-specific capabilities manifest.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* generatePodCapabilitiesPath('/app', 'squad-worker-7b4f6')
|
|
49
|
+
* // → '/app/.squad/machine-capabilities-squad-worker-7b4f6.json'
|
|
50
|
+
*/
|
|
51
|
+
export function generatePodCapabilitiesPath(teamRoot, podId) {
|
|
52
|
+
return path.join(teamRoot, '.squad', `machine-capabilities-${podId}.json`);
|
|
53
|
+
}
|
|
27
54
|
/**
|
|
28
55
|
* Load machine capabilities from the standard location.
|
|
29
|
-
*
|
|
56
|
+
*
|
|
57
|
+
* When `SQUAD_POD_ID` is set **and** `SQUAD_DEPLOYMENT_MODE` is
|
|
58
|
+
* `squad-per-pod`, the search order becomes:
|
|
59
|
+
* 1. `.squad/machine-capabilities-{podId}.json` (pod-specific)
|
|
60
|
+
* 2. `.squad/machine-capabilities.json` (shared fallback)
|
|
61
|
+
* 3. `~/.squad/machine-capabilities.json` (user home fallback)
|
|
62
|
+
*
|
|
63
|
+
* Otherwise (default `agent-per-node` mode):
|
|
30
64
|
* 1. `.squad/machine-capabilities.json` in the team root
|
|
31
65
|
* 2. `~/.squad/machine-capabilities.json` in the user home
|
|
32
66
|
*
|
|
@@ -34,15 +68,26 @@ const NEEDS_PREFIX = 'needs:';
|
|
|
34
68
|
*/
|
|
35
69
|
export async function loadCapabilities(teamRoot) {
|
|
36
70
|
const candidates = [];
|
|
71
|
+
const mode = getDeploymentMode();
|
|
72
|
+
const podId = getPodId();
|
|
37
73
|
if (teamRoot) {
|
|
74
|
+
// In squad-per-pod mode, try pod-specific manifest first
|
|
75
|
+
if (mode === 'squad-per-pod' && podId) {
|
|
76
|
+
candidates.push(generatePodCapabilitiesPath(teamRoot, podId));
|
|
77
|
+
}
|
|
38
78
|
candidates.push(path.join(teamRoot, '.squad', 'machine-capabilities.json'));
|
|
39
79
|
}
|
|
40
80
|
candidates.push(path.join(os.homedir(), '.squad', 'machine-capabilities.json'));
|
|
41
81
|
for (const candidate of candidates) {
|
|
42
|
-
if (existsSync(candidate)) {
|
|
82
|
+
if (storage.existsSync(candidate)) {
|
|
43
83
|
try {
|
|
44
|
-
const raw = await
|
|
45
|
-
|
|
84
|
+
const raw = await storage.read(candidate) ?? '';
|
|
85
|
+
const parsed = JSON.parse(raw);
|
|
86
|
+
// Stamp podId onto the loaded manifest when running in pod mode
|
|
87
|
+
if (mode === 'squad-per-pod' && podId) {
|
|
88
|
+
parsed.podId = parsed.podId ?? podId;
|
|
89
|
+
}
|
|
90
|
+
return parsed;
|
|
46
91
|
}
|
|
47
92
|
catch {
|
|
48
93
|
// Malformed file — skip
|