@aiwg/cli 2026.10.5 → 2026.10.7

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 (263) hide show
  1. package/agentic/code/addons/composition-engine/lib/runtime.mjs +1401 -0
  2. package/agentic/code/addons/composition-engine/lib/validator.mjs +513 -0
  3. package/agentic/code/addons/composition-engine/schemas/flow-graph.schema.json +372 -0
  4. package/agentic/code/providers/model-capabilities.v1.json +74 -50
  5. package/bin/aiwg.mjs +7 -3
  6. package/dist/src/a2a/agent-card.js +11 -0
  7. package/dist/src/api/index.d.ts +1 -0
  8. package/dist/src/api/index.js +1 -0
  9. package/dist/src/artifacts/browser-export.js +1 -0
  10. package/dist/src/artifacts/citation-parser.js +8 -1
  11. package/dist/src/artifacts/cli.js +57 -6
  12. package/dist/src/artifacts/fortemi-core-query-adapter.js +2 -0
  13. package/dist/src/artifacts/fortemi-core-sync.js +26 -8
  14. package/dist/src/artifacts/fortemi-shard-contract/2.2.0/contract.json +103 -0
  15. package/dist/src/artifacts/fortemi-shard-contract/2.2.0/full-v1-embedding-config.schema.json +212 -0
  16. package/dist/src/artifacts/fortemi-shard-contract/2.2.0/full-v1-embedding-set.schema.json +240 -0
  17. package/dist/src/artifacts/fortemi-shard-contract/2.2.0/full-v1-manifest.schema.json +451 -0
  18. package/dist/src/artifacts/fortemi-shard-export.js +284 -0
  19. package/dist/src/artifacts/graph-query.js +18 -8
  20. package/dist/src/artifacts/index-adapters.js +339 -0
  21. package/dist/src/artifacts/index-builder.js +143 -14
  22. package/dist/src/artifacts/index-files.js +15 -4
  23. package/dist/src/artifacts/index-preparation.js +2 -0
  24. package/dist/src/artifacts/index-reader.js +44 -0
  25. package/dist/src/artifacts/index-refresh.js +114 -55
  26. package/dist/src/artifacts/index-status.js +20 -5
  27. package/dist/src/artifacts/memory-maintenance.js +503 -0
  28. package/dist/src/artifacts/prebuilt-relations.js +3 -1
  29. package/dist/src/artifacts/query-engine.js +263 -108
  30. package/dist/src/artifacts/relations-builder.js +2 -2
  31. package/dist/src/artifacts/source-graph.js +2 -2
  32. package/dist/src/artifacts/types.js +9 -1
  33. package/dist/src/auth/client.js +5 -1
  34. package/dist/src/auth/credential-store.js +5 -1
  35. package/dist/src/auth/sensitive-input.js +151 -0
  36. package/dist/src/channel/manager.mjs +3 -0
  37. package/dist/src/cli/handlers/agentcard.js +47 -25
  38. package/dist/src/cli/handlers/auth.js +22 -2
  39. package/dist/src/cli/handlers/decision.js +22 -3
  40. package/dist/src/cli/handlers/effect.js +4 -84
  41. package/dist/src/cli/handlers/guided-setup.js +470 -0
  42. package/dist/src/cli/handlers/help.js +2 -2
  43. package/dist/src/cli/handlers/housekeeper.js +1110 -0
  44. package/dist/src/cli/handlers/index.js +4 -2
  45. package/dist/src/cli/handlers/init.js +41 -6
  46. package/dist/src/cli/handlers/install.js +6 -0
  47. package/dist/src/cli/handlers/local-executor.js +5 -3
  48. package/dist/src/cli/handlers/marketplace.js +15 -4
  49. package/dist/src/cli/handlers/mc.js +509 -53
  50. package/dist/src/cli/handlers/models.js +32 -2
  51. package/dist/src/cli/handlers/ralph-launcher.js +76 -4
  52. package/dist/src/cli/handlers/rules.js +1 -1
  53. package/dist/src/cli/handlers/script-runner.js +73 -2
  54. package/dist/src/cli/handlers/serve.js +5 -3
  55. package/dist/src/cli/handlers/sessions.js +1 -0
  56. package/dist/src/cli/handlers/setup.js +432 -1
  57. package/dist/src/cli/handlers/skill-lint.js +1 -1
  58. package/dist/src/cli/handlers/subcommands.js +118 -8
  59. package/dist/src/cli/handlers/use.js +335 -107
  60. package/dist/src/cli/handlers/workspace.js +3 -1
  61. package/dist/src/cli/prompt-utils.js +81 -0
  62. package/dist/src/cli/router.js +16 -1
  63. package/dist/src/config/aiwg-config.js +42 -0
  64. package/dist/src/config/cli.js +7 -3
  65. package/dist/src/config/decision-config.js +14 -1
  66. package/dist/src/config/gitignore.js +4 -0
  67. package/dist/src/config/native-sandbox-warnings.js +25 -0
  68. package/dist/src/config/workspace.js +2 -1
  69. package/dist/src/contributors/validation.js +6 -5
  70. package/dist/src/decision/adapters/jev.js +20 -31
  71. package/dist/src/decision/admission.js +7 -3
  72. package/dist/src/decision/ask.js +6 -1
  73. package/dist/src/decision/benchmark.js +482 -0
  74. package/dist/src/decision/ledger.js +22 -3
  75. package/dist/src/decision/pricing.js +147 -0
  76. package/dist/src/decision/qualification/gate-evidence.js +23 -18
  77. package/dist/src/decision/qualification/load-staged.js +576 -0
  78. package/dist/src/decision/qualification/load.js +109 -33
  79. package/dist/src/decision/qualification/runner.js +12 -5
  80. package/dist/src/decision/review/service.js +6 -4
  81. package/dist/src/decision/review/validate.js +23 -2
  82. package/dist/src/decision/savings.js +8 -3
  83. package/dist/src/discovery/index.js +492 -0
  84. package/dist/src/discovery/interview.js +238 -0
  85. package/dist/src/discovery/plan-apply.js +567 -0
  86. package/dist/src/discovery/plan-store.js +171 -0
  87. package/dist/src/discovery/plan-types.js +2 -0
  88. package/dist/src/discovery/plan-validation.js +139 -0
  89. package/dist/src/discovery/types.js +2 -0
  90. package/dist/src/effects/host.js +91 -0
  91. package/dist/src/extensions/commands/definitions.js +49 -9
  92. package/dist/src/extensions/manifest.js +71 -44
  93. package/dist/src/extensions/project-local-discovery.js +1 -1
  94. package/dist/src/extensions/project-local-gitignore.js +2 -0
  95. package/dist/src/extensions/project-quickref.js +18 -17
  96. package/dist/src/extensions/validation.js +32 -29
  97. package/dist/src/housekeeper/daemon-config.js +148 -0
  98. package/dist/src/housekeeper/ipc.js +84 -0
  99. package/dist/src/housekeeper/lifecycle.js +148 -0
  100. package/dist/src/housekeeper/platform.js +35 -0
  101. package/dist/src/housekeeper/status.js +70 -0
  102. package/dist/src/housekeeper/units.js +114 -0
  103. package/dist/src/issues/cli.js +16 -5
  104. package/dist/src/issues/live.js +44 -12
  105. package/dist/src/jobs/flow.js +22 -21
  106. package/dist/src/lint/rule-activation.js +20 -5
  107. package/dist/src/lint/runner.js +1 -1
  108. package/dist/src/marketplace/exchange.js +18 -6
  109. package/dist/src/marketplace/provenance.js +3 -2
  110. package/dist/src/mcp/adapters/codex-runtime.js +46 -76
  111. package/dist/src/mcp/cli.mjs +22 -96
  112. package/dist/src/mcp/config-file.mjs +6 -2
  113. package/dist/src/mcp/config-layers.mjs +23 -7
  114. package/dist/src/mcp/grok-build-config.mjs +2 -1
  115. package/dist/src/mcp/muse-native-config.mjs +2 -1
  116. package/dist/src/mcp/profiles.js +18 -31
  117. package/dist/src/mcp/profiles.mjs +18 -32
  118. package/dist/src/mcp/registry.js +7 -27
  119. package/dist/src/mcp/registry.mjs +7 -28
  120. package/dist/src/mcp/server.mjs +34 -1
  121. package/dist/src/mcp/tools/agentic-sandbox.mjs +8 -7
  122. package/dist/src/mcp/tools/command-run.mjs +3 -2
  123. package/dist/src/mcp/tools/decision.mjs +49 -48
  124. package/dist/src/mcp/tools/discovery.mjs +46 -21
  125. package/dist/src/mcp/tools/orchestration.mjs +22 -22
  126. package/dist/src/mcp/tools/subsystems.mjs +9 -8
  127. package/dist/src/mcp/tools/worker-invoke.mjs +30 -6
  128. package/dist/src/mcp/tools/writer-profiles.mjs +1 -1
  129. package/dist/src/memory/audit.js +719 -0
  130. package/dist/src/memory/canonical-context.js +392 -13
  131. package/dist/src/memory/canonical-maintenance.js +95 -0
  132. package/dist/src/memory/cli-result.js +22 -0
  133. package/dist/src/memory/cli.js +176 -0
  134. package/dist/src/memory/context-pack.js +57 -6
  135. package/dist/src/memory/cost.js +512 -0
  136. package/dist/src/memory/firewall-classification.d.mts +7 -0
  137. package/dist/src/memory/firewall-classification.mjs +32 -0
  138. package/dist/src/memory/index.js +8 -0
  139. package/dist/src/memory/line-maintenance.js +68 -0
  140. package/dist/src/memory/maintenance-cli.js +286 -0
  141. package/dist/src/memory/maintenance-contract.js +136 -0
  142. package/dist/src/memory/maintenance-index.js +18 -0
  143. package/dist/src/memory/maintenance-owner.js +2 -0
  144. package/dist/src/memory/maintenance-record.js +138 -0
  145. package/dist/src/memory/maintenance.js +254 -0
  146. package/dist/src/memory/project-registry.js +2 -1
  147. package/dist/src/memory/provider-memory-adapter.js +154 -0
  148. package/dist/src/memory/recommend-cli.js +83 -0
  149. package/dist/src/memory/recommend.js +269 -0
  150. package/dist/src/memory/scheduled.js +81 -0
  151. package/dist/src/memory/taxonomy.js +44 -0
  152. package/dist/src/mission-protocol/codecs.js +19 -9
  153. package/dist/src/mission-protocol/worker-status.js +91 -1
  154. package/dist/src/models/config-loader.js +11 -1
  155. package/dist/src/models/model-capabilities.v1.json +74 -50
  156. package/dist/src/models/provider-policy.js +125 -62
  157. package/dist/src/models/resolver.js +45 -8
  158. package/dist/src/models/worker-installation.d.mts +8 -1
  159. package/dist/src/models/worker-installation.mjs +231 -38
  160. package/dist/src/models/wrapper-route.js +1 -1
  161. package/dist/src/output-modes/registry.js +8 -7
  162. package/dist/src/packages/adapters/git.js +99 -23
  163. package/dist/src/packages/adapters/gitea.js +8 -27
  164. package/dist/src/packages/adapters/github.js +7 -25
  165. package/dist/src/packages/registry.js +4 -4
  166. package/dist/src/plugin/metadata-validator.js +1 -1
  167. package/dist/src/process/cli-command.d.mts +5 -0
  168. package/dist/src/process/cli-command.mjs +42 -0
  169. package/dist/src/providers/deploy-version.d.mts +1 -0
  170. package/dist/src/providers/deploy-version.mjs +17 -0
  171. package/dist/src/providers/provider-definitions.js +19 -16
  172. package/dist/src/providers/skill-ownership.d.mts +11 -2
  173. package/dist/src/providers/skill-ownership.mjs +35 -17
  174. package/dist/src/rules/activation.d.mts +11 -2
  175. package/dist/src/rules/activation.mjs +82 -6
  176. package/dist/src/rules/inventory.js +1 -1
  177. package/dist/src/rules/rule-frontmatter.schema.json +2 -0
  178. package/dist/src/schema/zod-validation.d.mts +6 -0
  179. package/dist/src/schema/zod-validation.mjs +50 -0
  180. package/dist/src/serve/executor-registry.js +297 -20
  181. package/dist/src/serve/executor-token.d.mts +1 -0
  182. package/dist/src/serve/executor-token.mjs +8 -0
  183. package/dist/src/serve/shared-host-scheduler.js +1102 -31
  184. package/dist/src/serve/worker-invocation.js +124 -15
  185. package/dist/src/sessions/adapters/claude.js +19 -18
  186. package/dist/src/sessions/adapters/codex.js +10 -9
  187. package/dist/src/sessions/adapters/copilot.js +14 -13
  188. package/dist/src/sessions/adapters/cursor.js +19 -18
  189. package/dist/src/sessions/adapters/deepseek-harness.js +9 -8
  190. package/dist/src/sessions/adapters/factory.js +11 -10
  191. package/dist/src/sessions/adapters/generic.js +32 -23
  192. package/dist/src/sessions/adapters/grokbot.js +35 -35
  193. package/dist/src/sessions/adapters/hermes.js +20 -19
  194. package/dist/src/sessions/adapters/muse.js +50 -49
  195. package/dist/src/sessions/adapters/omp.js +5 -4
  196. package/dist/src/sessions/adapters/openclaw.js +30 -29
  197. package/dist/src/sessions/adapters/opencode.js +26 -26
  198. package/dist/src/sessions/adapters/openhuman.js +24 -23
  199. package/dist/src/sessions/adapters/pi.js +5 -4
  200. package/dist/src/sessions/adapters/windsurf.js +8 -8
  201. package/dist/src/sessions/analytics.js +10 -9
  202. package/dist/src/sessions/candidates.js +7 -6
  203. package/dist/src/sessions/contracts.js +63 -53
  204. package/dist/src/sessions/output-registration.js +11 -10
  205. package/dist/src/sessions/workspace-discovery.js +3 -4
  206. package/dist/src/smiths/context-pipeline/aiwg-md.js +18 -1
  207. package/dist/src/smiths/context-pipeline/claude-hook.js +46 -10
  208. package/dist/src/smiths/context-pipeline/context-file-safety.js +330 -9
  209. package/dist/src/smiths/context-pipeline/finalization.js +3 -2
  210. package/dist/src/smiths/context-pipeline/generator.js +7 -19
  211. package/dist/src/smiths/context-pipeline/legacy-inject.js +3 -10
  212. package/dist/src/smiths/context-pipeline/managed-hook.js +5 -5
  213. package/dist/src/smiths/context-pipeline/parallelism-section.js +72 -5
  214. package/dist/src/smiths/context-pipeline/workspace-context.js +110 -22
  215. package/dist/src/tracker/project-inputs.js +2 -0
  216. package/dist/src/update/checker.d.mts +4 -0
  217. package/dist/src/update/checker.mjs +14 -0
  218. package/dist/src/update/notifier.mjs +2 -4
  219. package/dist/src/writing/exemplar-selection.js +6 -6
  220. package/dist/src/writing/voice-evaluation.js +24 -23
  221. package/dist/src/writing/writer-migration.js +14 -13
  222. package/dist/src/writing/writer-profile.js +19 -18
  223. package/dist/src/writing/writing-brief.js +18 -17
  224. package/dist/src/writing/writing-receipt.js +47 -46
  225. package/package.json +5 -2
  226. package/schemas/decision/DecisionReview.schema.json +78 -1
  227. package/schemas/mission-v1.schema.json +3 -0
  228. package/tools/agents/deploy-agents.mjs +67 -39
  229. package/tools/agents/providers/antigravity.mjs +6 -1
  230. package/tools/agents/providers/base.mjs +24 -14
  231. package/tools/agents/providers/claude.mjs +6 -3
  232. package/tools/agents/providers/codex.mjs +54 -57
  233. package/tools/agents/providers/context-write.mjs +28 -0
  234. package/tools/agents/providers/copilot.mjs +13 -4
  235. package/tools/agents/providers/cursor.mjs +1 -1
  236. package/tools/agents/providers/deepseek-harness.mjs +1 -1
  237. package/tools/agents/providers/factory.mjs +7 -1
  238. package/tools/agents/providers/grok-build.mjs +18 -2
  239. package/tools/agents/providers/grokbot.mjs +1 -1
  240. package/tools/agents/providers/hermes.mjs +12 -15
  241. package/tools/agents/providers/muse-hooks.mjs +21 -14
  242. package/tools/agents/providers/muse.mjs +7 -2
  243. package/tools/agents/providers/omp.mjs +31 -5
  244. package/tools/agents/providers/opencode.mjs +14 -5
  245. package/tools/agents/providers/openhuman.mjs +1 -1
  246. package/tools/agents/providers/pi.mjs +1 -1
  247. package/tools/agents/providers/provider-prepare-coordinator.mjs +29 -9
  248. package/tools/agents/providers/rule-delivery.mjs +289 -80
  249. package/tools/agents/providers/warp.mjs +4 -1
  250. package/tools/agents/providers/windsurf.mjs +13 -3
  251. package/tools/cli/workspace-status.mjs +5 -0
  252. package/tools/commands/deploy-prompts-codex.mjs +11 -8
  253. package/tools/ralph-external/lib/codex-adapter.mjs +6 -2
  254. package/tools/ralph-external/lib/consecutive-failure-circuit-breaker.mjs +26 -0
  255. package/tools/ralph-external/lib/launcher-recovery-evidence.mjs +7 -1
  256. package/tools/ralph-external/lib/muse-adapter.mjs +12 -2
  257. package/tools/ralph-external/lib/recovery-probe.mjs +14 -4
  258. package/tools/ralph-external/lib/worker-health.mjs +1 -1
  259. package/tools/ralph-external/lib/worker-isolation.mjs +65 -9
  260. package/tools/ralph-external/process-monitor.mjs +49 -8
  261. package/tools/ralph-external/session-launcher.mjs +405 -35
  262. package/tools/skills/deploy-skills-codex.mjs +11 -7
  263. package/vscode-extension/schemas/aiwg.config.v1.json +11 -1
@@ -20,6 +20,7 @@ import { prefillCardsHandler, contributeStartHandler, validateMetadataHandler, d
20
20
  import { skillLintHandler } from './skill-lint.js';
21
21
  import { addAgentHandler, addCommandHandler, addSkillHandler, addBehaviorHandler, addTemplateHandler, scaffoldAddonHandler, scaffoldExtensionHandler, scaffoldFrameworkHandler, scaffoldingHandlers, } from './scaffolding.js';
22
22
  import { behaviorHandler, daemonInitHandler, daemonHandlers, } from './daemon.js';
23
+ import { housekeeperHandler, housekeeperHandlers, } from './housekeeper.js';
23
24
  import { ralphHandler, ralphStatusHandler, ralphAbortHandler, ralphResumeHandler, ralphAttachHandler, ralphExternalHandler, ralphMemoryHandler, ralphConfigHandler, ralphHandlers, } from './ralph.js';
24
25
  import { mcpHandler, catalogHandler, listHandler, removeHandler, promoteHandler, newBundleHandler, quickrefHandler, newProjectHandler, installPluginHandler, uninstallPluginHandler, pluginStatusHandler, packagePluginHandler, packageAllPluginsHandler, indexHandler, corpusHandler, discoverHandler, showHandler, featuresHandler, skillsHandler, configHandler, opsHandler, storageHandler, activityLogHandler, kbHandler, memoryHandler, reflectionsHandler, provenanceHandler, researchStoreHandler, researchQueryHandler, chunkHandler, fanoutHandler, rlmPrepHandler, rlmSearchHandler, rlmStatusCliHandler, rlmCacheHandler, subcommandHandlers, } from './subcommands.js';
25
26
  import { runtimeInfoHandler } from './runtime-info.js';
@@ -97,7 +98,7 @@ installPluginHandler, uninstallPluginHandler, pluginStatusHandler, packagePlugin
97
98
  // Scaffolding
98
99
  addAgentHandler, addCommandHandler, addSkillHandler, addBehaviorHandler, addTemplateHandler, scaffoldAddonHandler, scaffoldExtensionHandler, scaffoldFrameworkHandler,
99
100
  // Daemon
100
- behaviorHandler, daemonInitHandler,
101
+ behaviorHandler, daemonInitHandler, housekeeperHandler,
101
102
  // Ralph
102
103
  ralphHandler, ralphStatusHandler, ralphAbortHandler, ralphResumeHandler, ralphAttachHandler, ralphExternalHandler, ralphMemoryHandler, ralphConfigHandler,
103
104
  // Mission Control
@@ -123,7 +124,7 @@ repoAccessHandler,
123
124
  // Lint
124
125
  lintHandler, };
125
126
  // Re-export handler arrays
126
- export { workspaceHandlers, utilityHandlers, scaffoldingHandlers, ralphHandlers, subcommandHandlers, mcHandlers, missionHandlers, teamHandlers, stewardHandlers, regenerateHandlers, workspaceContextHandlers, artifactsHandlers, effectHandlers, daemonHandlers, sandboxHandlers, repoAccessHandlers, };
127
+ export { workspaceHandlers, utilityHandlers, scaffoldingHandlers, housekeeperHandlers, ralphHandlers, subcommandHandlers, mcHandlers, missionHandlers, teamHandlers, stewardHandlers, regenerateHandlers, workspaceContextHandlers, artifactsHandlers, effectHandlers, daemonHandlers, sandboxHandlers, repoAccessHandlers, };
127
128
  /**
128
129
  * All registered command handlers
129
130
  *
@@ -222,6 +223,7 @@ export const allHandlers = [
222
223
  bestPracticesAuditHandler,
223
224
  // Daemon
224
225
  ...daemonHandlers,
226
+ ...housekeeperHandlers,
225
227
  // Config
226
228
  configHandler,
227
229
  executionModeHandler,
@@ -35,7 +35,10 @@ import { ensureWorkspaceContext } from '../../smiths/context-pipeline/workspace-
35
35
  import { detectInstalledWorkerClis, evaluateWorkerDispatchOffer, workerDispatchOfferQuestion, workerDispatchOfferHintWithArg, parseWorkerDispatchArg, } from '../../models/worker-dispatch-offer.js';
36
36
  import { EXIT_CODES } from '../errors.js';
37
37
  import { isInteractive } from '../env.js';
38
+ import { parseGuidedSetupFlags, runGuidedSetup } from './guided-setup.js';
38
39
  import { requireFlagValue, collectFlagValues, parseBooleanFlagValue, parseListFlagValue, parseKeyValueEntry, MissingFlagValueError, } from '../flag-parsing.js';
40
+ /** Default project scripts installed by init and merged by guided setup apply. */
41
+ export const DEFAULT_SCRIPTS = { deploy: 'aiwg use all', doctor: 'aiwg doctor', sync: 'aiwg sync' };
39
42
  const PROVIDER_LABELS = {
40
43
  antigravity: 'Google Antigravity .agents/',
41
44
  claude: 'Claude Code .claude/',
@@ -104,7 +107,7 @@ function renderWorkerDispatchHintIfApplicable(parallelism, setup) {
104
107
  if (offer.shouldOffer)
105
108
  ui.dim(` ${workerDispatchOfferHintWithArg(offer.detected)}`);
106
109
  }
107
- function parseInitArgInputs(args) {
110
+ export function parseInitArgInputs(args) {
108
111
  // #3062 second review, finding 4: `precedence: 'first'` matches this
109
112
  // command's pre-existing (and, for `--providers`/`--default-scripts`/
110
113
  // `--script`/`--custom-scripts`, only) convention — see
@@ -181,6 +184,27 @@ export const initHandler = {
181
184
  description: 'Initialise the baseline .aiwg/aiwg.config for an agent-led project setup',
182
185
  category: 'project',
183
186
  aliases: [],
187
+ async help() {
188
+ return { exitCode: 0, rawOutput: true, message: `Usage: aiwg init [options]
189
+
190
+ --scope project|user Record a guided setup plan (no config writes)
191
+ --intent code|docs|ops|mixed Workspace usage intent
192
+ --jev enable|decline|defer Optional external decision service (default off)
193
+ --region <r> --endpoint <url> --verify --remove --token-stdin Existing Jev options
194
+ --credential <provider>=stdin|file:PATH|store:NAME|env:NAME Credential reference only
195
+ --providers <list> Provider IDs
196
+ --default-scripts true|false Include default scripts
197
+ --custom-scripts true|false Include custom scripts
198
+ --script <name>=<command> Custom script (repeatable)
199
+ --worker-dispatch enable|decline Worker dispatch choice
200
+ --force Re-enter existing settings
201
+ --non-interactive, --yes Disable prompts
202
+ --dry-run Preview without saving
203
+
204
+ The new --scope, --intent or --credential flags select guided planning.
205
+ Progress resumes from the workspace's saved plan. Apply is a separate step.
206
+ ` };
207
+ },
184
208
  async execute(ctx) {
185
209
  const force = ctx.args.includes('--force');
186
210
  // `--non-interactive`/`--yes` are this command's own explicit flags for
@@ -204,13 +228,22 @@ export const initHandler = {
204
228
  let defaultScriptsArg;
205
229
  let customScriptsArg;
206
230
  let scriptPairs;
231
+ let guidedFlags;
207
232
  try {
233
+ guidedFlags = parseGuidedSetupFlags(ctx.args, 'init');
208
234
  ({ workerDispatchArg, providersArg, defaultScriptsArg, customScriptsArg, scriptPairs } = parseInitArgInputs(ctx.args));
209
235
  }
210
236
  catch (err) {
211
237
  const message = err instanceof MissingFlagValueError ? `${err.message}.` : err instanceof Error ? err.message : String(err);
212
238
  return { exitCode: EXIT_CODES.USAGE, message };
213
239
  }
240
+ if (guidedFlags.enabled) {
241
+ const hasScripts = defaultScriptsArg !== undefined || customScriptsArg !== undefined || Object.keys(scriptPairs).length > 0;
242
+ return runGuidedSetup(ctx, guidedFlags, { providers: providersArg, workerDispatch: workerDispatchArg,
243
+ ...(hasScripts ? { scripts: { defaultScripts: defaultScriptsArg ?? true,
244
+ customScripts: customScriptsArg ?? Object.keys(scriptPairs).length > 0, scripts: scriptPairs } } : {}),
245
+ }, !nonInteractive, projectDir);
246
+ }
214
247
  ui.blank();
215
248
  console.log(` ${ui.brandMark()} ${ui.bold('AIWG Baseline Config')}`);
216
249
  ui.rule();
@@ -277,7 +310,6 @@ export const initHandler = {
277
310
  let providers;
278
311
  let scripts = {};
279
312
  let workerDispatchDecision;
280
- const DEFAULT_SCRIPTS = { deploy: 'aiwg use all', doctor: 'aiwg doctor', sync: 'aiwg sync' };
281
313
  if (nonInteractive) {
282
314
  // Non-interactive: an explicit `--providers`/`--default-scripts`
283
315
  // answers the corresponding wizard input directly (review item 10);
@@ -382,12 +414,15 @@ export const initHandler = {
382
414
  await writeAiwgConfig(projectDir, config);
383
415
  if (workerDispatchDecision?.kind === 'enable')
384
416
  ui.info('Next: aiwg doctor --probe-workers --qualify.');
385
- const normalizedAiwgMdPath = await writeNormalizedAiwgMd(projectDir);
386
- const workspace = await ensureWorkspaceContext(projectDir);
417
+ const skipContext = ctx.args.includes('--no-context-files');
418
+ const normalizedAiwgMdPath = skipContext ? null : await writeNormalizedAiwgMd(projectDir);
419
+ const workspace = skipContext ? null : await ensureWorkspaceContext(projectDir);
387
420
  ui.blank();
388
421
  ui.success(`Created ${getConfigPath(projectDir)}`);
389
- ui.success(`Created ${normalizedAiwgMdPath}`);
390
- ui.success(`${workspace.action === 'created' ? 'Created' : 'Preserved'} WORKSPACE.md`);
422
+ if (normalizedAiwgMdPath)
423
+ ui.success(`Created ${normalizedAiwgMdPath}`);
424
+ if (workspace)
425
+ ui.success(`${workspace.action === 'created' ? 'Created' : 'Preserved'} WORKSPACE.md`);
391
426
  ui.success(`Providers: ${providers.join(', ')}`);
392
427
  if (Object.keys(scripts).length > 0) {
393
428
  ui.success(`Scripts: ${Object.keys(scripts).join(', ')}`);
@@ -18,6 +18,7 @@
18
18
  * @implements #804
19
19
  */
20
20
  import path from 'path';
21
+ import { sensitiveInputOptions } from '../../auth/sensitive-input.js';
21
22
  import { installPackage } from '../../packages/registry.js';
22
23
  import { recordDeployment } from '../../packages/package-registry.js';
23
24
  import { marketplaceConfigDir, resolveVerificationPolicy } from '../../marketplace/exchange.js';
@@ -59,6 +60,7 @@ export const installHandler = {
59
60
  ' --deploy Deploy immediately after install',
60
61
  ' --provider <name> Target provider (claude, copilot, cursor...)',
61
62
  ' --target <dir> Project directory to deploy into',
63
+ ' --token-interactive | --token-stdin | --token-file <path> | --token-store <name> | --token-env <name>',
62
64
  ' --refresh Force re-pull even if cached',
63
65
  ' --ref <tag-or-sha> Resolve this ref and lock its immutable commit',
64
66
  ' --package <id> Select one wrapper when a repository contains several',
@@ -69,6 +71,9 @@ export const installHandler = {
69
71
  ].join('\n'),
70
72
  };
71
73
  }
74
+ if (/^https?:\/\/[^/]*@/.test(rawRef)) {
75
+ return { exitCode: 1, message: 'Credentials in Git URLs are refused; use --token-stdin, --token-file, --token-store or --token-env.' };
76
+ }
72
77
  const deploy = hasFlag(ctx.args, '--deploy');
73
78
  const refresh = hasFlag(ctx.args, '--refresh');
74
79
  const provider = parseFlag(ctx.args, '--provider') ?? 'claude';
@@ -97,6 +102,7 @@ export const installHandler = {
97
102
  const resolvedPolicy = await resolveVerificationPolicy(policyName, scope);
98
103
  const installed = await installPackage(rawRef, {
99
104
  refresh,
105
+ tokenInput: sensitiveInputOptions(ctx.args, 'token'),
100
106
  ref: parseFlag(ctx.args, '--ref'),
101
107
  packageSelector: parseFlag(ctx.args, '--package'),
102
108
  verify,
@@ -18,7 +18,7 @@
18
18
  */
19
19
  import path from 'path';
20
20
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
21
- import { randomUUID } from 'crypto';
21
+ import { createHash, randomUUID } from 'crypto';
22
22
  import { pathToFileURL } from 'node:url';
23
23
  import { projectAiwgPath } from '../../config/project-artifacts.js';
24
24
  const DEFAULT_PORT = 8200;
@@ -27,7 +27,7 @@ const DEFAULT_AIWG_SERVE = 'http://127.0.0.1:7337';
27
27
  /**
28
28
  * Resolve or generate-once the executor identity.
29
29
  * Written to `.aiwg/local-executor/identity.json` so restarts reuse the same
30
- * UUID (token reclaim via identity store on the aiwg-serve side).
30
+ * UUID. The shim separately persists its bearer token to authenticate restarts.
31
31
  */
32
32
  function resolveExecutorId(override) {
33
33
  if (override)
@@ -103,7 +103,7 @@ function warnIfNonLoopback(bind) {
103
103
  console.warn('[local-executor] WARNING: binding on non-loopback interface ' + bind + '.\n' +
104
104
  ' This executor has isolation:none — agent code runs in the host process.\n' +
105
105
  ' Ensure this interface is not reachable by untrusted parties.\n' +
106
- ' The executor token will be rotated by aiwg-serve on first non-loopback register.');
106
+ ' Keep the persisted executor bearer token private.');
107
107
  }
108
108
  }
109
109
  /**
@@ -208,6 +208,8 @@ export const localExecutorServeHandler = {
208
208
  restBase,
209
209
  wsBase,
210
210
  aiwgServeUrl: opts.aiwgServe,
211
+ token: process.env['AIWG_EXECUTOR_TOKEN'],
212
+ tokenPath: projectAiwgPath(process.cwd(), 'local-executor', 'tokens', `${createHash('sha256').update(`${opts.aiwgServe}\0${opts.executorId}`).digest('hex')}.json`),
211
213
  });
212
214
  // Register with aiwg-serve
213
215
  let token;
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import fs from 'node:fs';
11
11
  import path from 'node:path';
12
+ import { sensitiveInputOptions } from '../../auth/sensitive-input.js';
12
13
  import { searchSkills } from '../../skills/registry.js';
13
14
  import { installPackage, listInstalledPackages } from '../../packages/registry.js';
14
15
  import { GitAdapter } from '../../packages/adapters/git.js';
@@ -24,7 +25,7 @@ const USAGE = [
24
25
  ' aiwg marketplace verify <package|lock> Verify cached content and receipts offline',
25
26
  ' aiwg marketplace export <package> --output <archive.json>',
26
27
  ' aiwg marketplace import <archive.json> [--project-local]',
27
- ' aiwg marketplace publish <source> --key <pem> --publisher <id>',
28
+ ' aiwg marketplace publish <source> --publisher <id> [--key-file <pem> | --key-stdin]',
28
29
  ' aiwg marketplace remove <catalog-id>',
29
30
  ' aiwg marketplace list List installed marketplace packages',
30
31
  '',
@@ -33,6 +34,11 @@ const USAGE = [
33
34
  ' --project-local Store/read state below the target project .aiwg directory',
34
35
  ' --global Store/read state in the user AIWG directory (default)',
35
36
  ' --policy <name> Named trust policy or JSON policy path',
37
+ 'Git fetch token sources:',
38
+ ' --token-interactive | --token-stdin | --token-file <path> | --token-store <name> | --token-env <name>',
39
+ 'Publish key sources (multiline PEM):',
40
+ ' --key-interactive | --key-stdin | --key-file <path> | --key-store <name> | --key-env <name>',
41
+ ' --key <path> Compatibility alias for --key-file (private file required)',
36
42
  ].join('\n');
37
43
  function parseFlag(args, flag) {
38
44
  const idx = args.indexOf(flag);
@@ -105,7 +111,10 @@ async function handleAdd(ctx) {
105
111
  const requestedRef = parseFlag(ctx.args, '--ref') ?? 'HEAD';
106
112
  const adapter = new GitAdapter();
107
113
  const source = { gitUrl: argument, ref: requestedRef, label: argument };
108
- const cachePath = await adapter.fetch(source, { refresh: hasFlag(ctx.args, '--refresh') });
114
+ const cachePath = await adapter.fetch(source, {
115
+ refresh: hasFlag(ctx.args, '--refresh'),
116
+ tokenInput: sensitiveInputOptions(ctx.args, 'token'),
117
+ });
109
118
  const identity = await inspectGitCheckout(cachePath);
110
119
  const candidates = [
111
120
  path.join(cachePath, 'aiwg-marketplace-catalog.json'),
@@ -251,6 +260,7 @@ async function handleInstall(ctx) {
251
260
  }
252
261
  const installed = await installPackage(rawRef, {
253
262
  configDir,
263
+ tokenInput: sensitiveInputOptions(ctx.args, 'token'),
254
264
  ref,
255
265
  packageSelector: parseFlag(ctx.args, '--package'),
256
266
  refresh: hasFlag(ctx.args, '--refresh'),
@@ -342,8 +352,8 @@ async function handlePublish(ctx) {
342
352
  return argument;
343
353
  const privateKeyPath = parseFlag(ctx.args, '--key');
344
354
  const publisher = parseFlag(ctx.args, '--publisher');
345
- if (!privateKeyPath || !publisher) {
346
- return { exitCode: 1, message: 'Error: Usage: aiwg marketplace publish <source> --key <ed25519.pem> --publisher <id> [--output <dir>]' };
355
+ if (!publisher) {
356
+ return { exitCode: 1, message: 'Error: Usage: aiwg marketplace publish <source> [--key-file <ed25519.pem> | --key-stdin] --publisher <id> [--output <dir>]' };
347
357
  }
348
358
  try {
349
359
  const outputDir = parseFlag(ctx.args, '--output') ?? path.join(path.resolve(argument), '.aiwg', 'marketplace');
@@ -355,6 +365,7 @@ async function handlePublish(ctx) {
355
365
  sourceDir: argument,
356
366
  outputDir,
357
367
  privateKeyPath,
368
+ keyInput: sensitiveInputOptions(ctx.args, 'key'),
358
369
  publicKeyPath: parseFlag(ctx.args, '--public-key'),
359
370
  keyId: parseFlag(ctx.args, '--key-id'),
360
371
  publisher,