@aopslabs/aops 0.3.23 → 0.3.25

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 (68) hide show
  1. package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/SKILL.md +0 -1
  2. package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/agentspace/SKILL.md +0 -6
  3. package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/collaborative-work/SKILL.md +1 -2
  4. package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/working-disciplines/SKILL.md +2 -5
  5. package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/agentspace.md +1 -16
  6. package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/aops-cli.md +4 -33
  7. package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/working-disciplines.md +32 -138
  8. package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/manifest.json +17 -22
  9. package/agent-assets-release/agent-assets/inventory.json +5 -5
  10. package/agent-assets-release/agent-assets/projection.json +1 -1
  11. package/agent-assets-release/agent-assets-release.json +48 -53
  12. package/agent-assets-release/agent-assets-release.sigstore.json +27 -31
  13. package/assets/agent-assets/core/SKILL.md +0 -1
  14. package/assets/agent-assets/core/references/agentspace/SKILL.md +0 -6
  15. package/assets/agent-assets/core/references/collaborative-work/SKILL.md +1 -2
  16. package/assets/agent-assets/core/references/working-disciplines/SKILL.md +2 -5
  17. package/assets/agent-assets/core/user-guides/agentspace.md +1 -16
  18. package/assets/agent-assets/core/user-guides/aops-cli.md +4 -33
  19. package/assets/agent-assets/core/user-guides/working-disciplines.md +32 -138
  20. package/dist/commands/checkpoint.js +4 -23
  21. package/dist/commands/community-server.js +212 -6
  22. package/dist/commands/db.js +145 -0
  23. package/dist/commands/experience.js +0 -2
  24. package/dist/commands/global-update.js +447 -22
  25. package/dist/commands/memory.js +8 -2
  26. package/dist/commands/official-catalog.js +1 -1
  27. package/dist/commands/plan.js +2 -2
  28. package/dist/commands/pm/index.js +39 -3
  29. package/dist/commands/pm/projectman.js +281 -8
  30. package/dist/commands/start-disciplines.js +8 -21
  31. package/dist/commands/start.js +20 -504
  32. package/dist/lib/agent-assets/native-fs.js +2 -2
  33. package/dist/lib/community-cockpit-lifecycle.js +95 -1
  34. package/dist/lib/community-migration-snapshot.js +43 -2
  35. package/dist/lib/community-native-backup.js +386 -0
  36. package/dist/lib/community-native-lifecycle.js +147 -5
  37. package/dist/lib/community-native-migration.js +20 -0
  38. package/dist/main.js +2 -2
  39. package/dist/seeds/agents-md.js +1 -1
  40. package/dist/utils/playbook-workspace.js +5 -33
  41. package/dist/utils/session-guidance.js +0 -7
  42. package/native/bin/darwin-arm64/aops-agent-assets-fs +0 -0
  43. package/native/bin/darwin-x64/aops-agent-assets-fs +0 -0
  44. package/native/bin/linux-arm64/aops-agent-assets-fs +0 -0
  45. package/native/bin/linux-x64/aops-agent-assets-fs +0 -0
  46. package/native/bin/win32-x64/aops-agent-assets-fs.exe +0 -0
  47. package/native/manifest.json +6 -6
  48. package/native/qualifications/win32-x64.json +2 -2
  49. package/native/tui/darwin-arm64/aops-tui +0 -0
  50. package/native/tui/linux-x64/aops-tui +0 -0
  51. package/native/tui/win32-x64/aops-tui.exe +0 -0
  52. package/package.json +21 -9
  53. package/agent-assets-release/agent-assets/core/647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09/files/references/mission/SKILL.md +0 -54
  54. package/assets/agent-assets/core/references/mission/SKILL.md +0 -54
  55. package/dist/commands/mission.js +0 -562
  56. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/aops-cli-core/SKILL.md +0 -0
  57. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/chatv3/SKILL.md +0 -0
  58. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/discuss/SKILL.md +0 -0
  59. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/docman/SKILL.md +0 -0
  60. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/projectman/SKILL.md +0 -0
  61. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/sys/SKILL.md +0 -0
  62. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/references/view/SKILL.md +0 -0
  63. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/agent-assets.md +0 -0
  64. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/aops-system.md +0 -0
  65. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/chatv3.md +0 -0
  66. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/docman.md +0 -0
  67. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/projectman.md +0 -0
  68. /package/agent-assets-release/agent-assets/core/{647c6e84fbc48f9a36945d81660f4d2a5241f58a53a18054365bfc16868b0f09 → bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb}/files/user-guides/sys.md +0 -0
@@ -10,8 +10,7 @@ import { buildReadOnlyActivePlaybookNudgePackFromContext, } from '../utils/playb
10
10
  import { buildSessionGuidancePack } from '../utils/session-guidance.js';
11
11
  import { buildReadOnlyRepoFirstMemoryBriefFromContext } from './memory.js';
12
12
  import { applyCommonOptions, compactPayload } from '../utils/command.js';
13
- import { loadMissionResumePack } from './mission.js';
14
- import { START_DISCIPLINES, START_DISCIPLINE_PROFILES, START_DISCIPLINE_SIGNAL_MAPPING, startGuardrailGroupsForDiscipline, startGuardrailsForDiscipline, } from './start-disciplines.js';
13
+ import { START_DISCIPLINES, START_DISCIPLINE_PROFILES, startGuardrailsForDiscipline, } from './start-disciplines.js';
15
14
  export const START_PROMPT_MIRROR_PATH = '.aops/hosted/prompts/aops-collaborative-startup.md';
16
15
  export const START_MODES = ['solo', 'solo+async-review', 'chat-room'];
17
16
  export const START_METHODS = START_DISCIPLINES;
@@ -131,11 +130,11 @@ const START_METHOD_RECIPES = {
131
130
  'coordinator-loop': {
132
131
  title: 'Coordinator loop',
133
132
  steps: [
134
- 'The coordinator researches independently, authors mission/ktask/plan records, and assigns work with canonical refs.',
133
+ 'The coordinator researches independently, authors ktask/plan records, and assigns work with canonical refs.',
135
134
  'Implementers execute slices, open a review request per slice, and route questions to the coordinator instead of the operator.',
136
135
  'The coordinator reviews with code/runtime verification, then instructs the pathspec commit and the next assignment.',
137
136
  ],
138
- defaultSurfaces: ['agentspace.mission', 'chatv3.room', 'projectman.implementation-plan', 'projectman.review-request'],
137
+ defaultSurfaces: ['chatv3.room', 'projectman.implementation-plan', 'projectman.review-request'],
139
138
  },
140
139
  };
141
140
  function serializeStartGuardrail(guardrail) {
@@ -159,8 +158,6 @@ function buildCheckpointCreateCommand(params) {
159
158
  ];
160
159
  if (params.position)
161
160
  parts.push('--position', quoteCommandArg(params.position));
162
- if (params.missionId)
163
- parts.push('--mission-id', params.missionId);
164
161
  if (params.sprintId)
165
162
  parts.push('--sprint-id', params.sprintId);
166
163
  if (params.phaseId)
@@ -214,386 +211,6 @@ function recommendStartDiscipline(answers) {
214
211
  reasons.push('single-agent or low-uncertainty execution');
215
212
  return { discipline: 'solo-pm-loop', reasons, signals };
216
213
  }
217
- function buildMissionPolicySeed(params) {
218
- const profile = START_DISCIPLINE_PROFILES[params.selected];
219
- const guardrails = startGuardrailsForDiscipline(params.selected);
220
- const guardrailGroups = startGuardrailGroupsForDiscipline(params.selected);
221
- return compactPayload({
222
- discipline: {
223
- id: params.selected,
224
- version: profile.version,
225
- enforcement: 'advisory',
226
- selectedBy: params.explicit ? 'operator' : 'signals',
227
- selectedVia: params.explicitSource ? `--${params.explicitSource}` : 'signal-mapping',
228
- recommended: params.recommended,
229
- signals: params.signals,
230
- rationale: params.reasons,
231
- },
232
- guardrails: guardrails.map(serializeStartGuardrail),
233
- guardrailGroups: {
234
- execution: guardrailGroups.execution.map(serializeStartGuardrail),
235
- closeout: guardrailGroups.closeout.map(serializeStartGuardrail),
236
- },
237
- closeout: {
238
- required: true,
239
- trigger: 'explicit',
240
- guardrailIds: profile.closeoutGuardrailIds,
241
- check: {
242
- command: 'aops-cli mission check --closeout --id <mission-id> --json',
243
- mode: 'read-only',
244
- statusStates: ['present', 'missing', 'deferred-with-owner', 'not-applicable', 'waived-by-operator'],
245
- note: 'Later closeout validator; reports evidence for closeout guardrails and does not mutate PM, memory, git, boards, or chat rooms.',
246
- },
247
- handoff: {
248
- command: 'aops-cli mission handoff --id <mission-id> [--complete] --apply --json',
249
- mode: 'later-apply-helper',
250
- note: 'Conservative mission-level helper only; board and room closeout remain operator-approved lifecycle actions.',
251
- },
252
- },
253
- review: profile.review,
254
- issue: profile.issue,
255
- memory: profile.memory,
256
- plan: profile.plan,
257
- vocabBridge: {
258
- mode: {
259
- value: params.mode,
260
- meaning: 'transport/session shape',
261
- },
262
- discipline: {
263
- value: params.selected,
264
- meaning: 'policy preset plus guardrails, review, issue, memory, and plan rhythm',
265
- },
266
- method: {
267
- value: params.selected,
268
- aliasOf: 'discipline',
269
- compatibility: 'kept for existing start consumers during the transition',
270
- },
271
- },
272
- signalMapping: START_DISCIPLINE_SIGNAL_MAPPING,
273
- });
274
- }
275
- function buildStartMissionPack(answers, params) {
276
- const recommended = recommendStartDiscipline(answers);
277
- const explicit = resolveExplicitDiscipline(answers);
278
- const selected = explicit.discipline ?? recommended.discipline;
279
- const resumeRef = normalize(answers.resume);
280
- const missionRef = resumeRef ?? normalize(answers.mission);
281
- const objective = normalize(answers.objective) ?? normalize(answers.task);
282
- const planId = normalize(answers.plan);
283
- const mode = normalize(answers.mode) ?? 'solo';
284
- const board = normalize(answers.board);
285
- const projectSlug = normalize(answers.projectSlug) ?? params.projectSlug;
286
- const roomSlug = normalize(answers.roomSlug);
287
- const checkpointStart = booleanFlag(answers.checkpointStart);
288
- const checkpointAutoBetweenPhases = booleanFlag(answers.checkpointAutoBetweenPhases);
289
- const checkpointMissionId = missionRef ?? '<mission-id>';
290
- const checkpointStartCommand = buildCheckpointCreateCommand({
291
- summary: objective ? `Mission start: ${objective}` : 'Mission start checkpoint',
292
- position: planId ? `Starting implementation plan ${planId}` : 'Mission start',
293
- missionId: checkpointMissionId,
294
- sprintId: planId,
295
- });
296
- const checkpointPhaseTransitionCommand = buildCheckpointCreateCommand({
297
- summary: '<phase transition checkpoint summary>',
298
- position: '<from phase> -> <to phase>',
299
- missionId: checkpointMissionId,
300
- sprintId: planId ?? '<sprint-id>',
301
- phaseId: '<phase-id>',
302
- });
303
- const checkpointSuggestedActions = [
304
- checkpointStart
305
- ? {
306
- kind: 'mission-start-checkpoint',
307
- policyPath: 'mission.policy.checkpoint.start',
308
- mode: 'nudge-first',
309
- applyRequired: true,
310
- command: checkpointStartCommand,
311
- }
312
- : undefined,
313
- checkpointAutoBetweenPhases
314
- ? {
315
- kind: 'phase-transition-checkpoint',
316
- policyPath: 'mission.policy.checkpoint.autoBetweenPhases',
317
- mode: 'nudge-first',
318
- applyRequired: true,
319
- command: checkpointPhaseTransitionCommand,
320
- }
321
- : undefined,
322
- ].filter((action) => action !== undefined);
323
- const syncStatusCommand = buildScopedSyncCommand({ action: 'status', projectSlug });
324
- const syncDiffCommand = buildScopedSyncCommand({ action: 'diff', projectSlug });
325
- const syncSuggestedActions = [
326
- {
327
- kind: 'cache-sync-status',
328
- policyPath: 'mission.policy.sync.startStatus',
329
- mode: 'read-only',
330
- applyRequired: false,
331
- command: syncStatusCommand,
332
- note: 'Run at session start to inspect the read-only local cache vs the hosted server.',
333
- },
334
- {
335
- kind: 'cache-sync-diff',
336
- policyPath: 'mission.policy.sync.startDiff',
337
- mode: 'read-only',
338
- applyRequired: false,
339
- command: syncDiffCommand,
340
- note: 'Run at session start to inspect cache-vs-hosted drift; the hosted server is the source of truth.',
341
- },
342
- ];
343
- const playbookSet = params.playbookSet;
344
- const playbookNudges = params.playbookNudges;
345
- const playbookSuggestedActions = playbookNudges?.suggestedActions ?? playbookSet?.suggestedActions ?? [];
346
- const deferredBindings = [
347
- planId
348
- ? {
349
- surface: 'projectman.implementation-plan',
350
- status: 'deferred',
351
- applyRequired: true,
352
- command: `aops-cli plan update --id ${planId} --reference <ref> --apply --json`,
353
- }
354
- : {
355
- surface: 'projectman.implementation-plan',
356
- status: 'deferred',
357
- applyRequired: true,
358
- command: 'aops-cli plan create --task <task-id> --name "<name>" --goal "<goal>" --apply --json',
359
- },
360
- selected === 'build-review-chat' || mode === 'chat-room'
361
- ? {
362
- surface: 'projectman.review-request',
363
- status: 'deferred',
364
- applyRequired: true,
365
- command: 'aops-cli pm review-request create --review-scope sprint:<plan-id> --target-agent <reviewer> --apply --json',
366
- }
367
- : undefined,
368
- selected === 'design-first-consensus'
369
- ? {
370
- surface: 'agentspace.discuss',
371
- status: 'deferred',
372
- applyRequired: true,
373
- command: 'aops-cli discuss start --title "<decision>" --question "<question>" --apply --json',
374
- }
375
- : undefined,
376
- ...checkpointSuggestedActions.map((action) => ({
377
- surface: 'agentspace.memory-item.checkpoint',
378
- status: 'suggested',
379
- applyRequired: true,
380
- policyPath: action.policyPath,
381
- command: action.command,
382
- })),
383
- ].filter((binding) => binding !== undefined);
384
- const state = missionRef ? 'resume' : objective ? 'define' : 'implicit';
385
- const mission = compactPayload({
386
- ref: missionRef,
387
- objective,
388
- projectSlug,
389
- });
390
- const selectionReasons = explicit.discipline
391
- ? [`explicit ${explicit.source === 'method' ? 'method alias' : 'discipline'} flag supplied`, ...recommended.reasons]
392
- : recommended.reasons;
393
- const policyBase = buildMissionPolicySeed({
394
- selected,
395
- recommended: recommended.discipline,
396
- explicit: explicit.discipline !== undefined,
397
- explicitSource: explicit.source,
398
- reasons: selectionReasons,
399
- signals: recommended.signals,
400
- mode,
401
- });
402
- const policy = compactPayload({
403
- ...policyBase,
404
- orchestration: {
405
- mode: 'read-only-pack',
406
- sideEffects: 'none',
407
- activeBindings: 'deferred',
408
- note: 'start recommends PM/chat/discuss surfaces but does not create or bind records; run deferred commands with --apply to mutate truth surfaces.',
409
- },
410
- checkpoint: {
411
- start: checkpointStart,
412
- autoBetweenPhases: checkpointAutoBetweenPhases,
413
- mode: 'nudge-first',
414
- defaultWrite: false,
415
- writeRequires: 'explicit aops-cli checkpoint create --apply --json',
416
- suggestedActions: checkpointSuggestedActions,
417
- note: 'start composes checkpoint policy and suggested actions only; it never writes checkpoint memory by itself.',
418
- },
419
- sync: {
420
- mode: 'read-only-cache',
421
- startStatus: true,
422
- startDiff: true,
423
- defaultWrite: false,
424
- readOnly: true,
425
- readOnlyAtStart: ['status', 'diff'],
426
- sourceOfTruth: 'hosted-server',
427
- note: 'Server-first: the hosted aops-server is the source of truth and .aops/** is a read-only local cache. start composes read-only status/diff actions only; there is no push-back from the cache.',
428
- suggestedActions: syncSuggestedActions,
429
- },
430
- playbook: {
431
- owner: 'agentspace.memory-item',
432
- surface: 'agentspace.playbook',
433
- mode: 'nudge-first-read-only',
434
- defaultWrite: false,
435
- scopes: ['project', 'session'],
436
- durability: {
437
- project: ['sticky', 'durable'],
438
- session: ['short', 'durable', 'sticky'],
439
- },
440
- reviewState: ['accepted'],
441
- count: playbookSet?.count ?? 0,
442
- activeCount: playbookNudges?.count ?? playbookSet?.count ?? 0,
443
- projectCount: playbookNudges?.project.count ?? playbookSet?.count ?? 0,
444
- sessionCount: playbookNudges?.session.count ?? 0,
445
- suggestedActions: playbookSuggestedActions,
446
- closeoutCapture: playbookNudges?.closeoutCapture,
447
- examples: playbookNudges?.examples,
448
- note: 'start reads active accepted project/session playbooks as nudge-first guidance only; capture and promotion remain explicit playbook/experience commands with --apply.',
449
- },
450
- planning: {
451
- owner: 'projectman',
452
- surface: 'projectman.implementation-plan.*',
453
- sprintBacked: true,
454
- planId: planId ?? null,
455
- note: 'implementation-plan id is the underlying sprint id',
456
- },
457
- chat: selected === 'build-review-chat' || mode === 'chat-room'
458
- ? {
459
- owner: 'chatv3',
460
- roomSlug: roomSlug ?? null,
461
- note: 'coordination and wake only; PM remains execution/review truth',
462
- }
463
- : undefined,
464
- discuss: selected === 'design-first-consensus'
465
- ? {
466
- owner: 'agentspace.discuss',
467
- note: 'record final stances before implementation when design uncertainty is material',
468
- }
469
- : undefined,
470
- });
471
- const policyJson = JSON.stringify(policy);
472
- const guardrails = startGuardrailsForDiscipline(selected);
473
- const guardrailGroups = startGuardrailGroupsForDiscipline(selected);
474
- const profile = START_DISCIPLINE_PROFILES[selected];
475
- return {
476
- state,
477
- ...(Object.keys(mission).length > 0 ? { mission } : {}),
478
- ...(params.resumePack ? { resumePack: params.resumePack.result } : {}),
479
- discipline: {
480
- selected,
481
- recommended: recommended.discipline,
482
- explicit: explicit.discipline !== undefined,
483
- selectedBy: explicit.discipline ? 'operator' : 'signals',
484
- reasons: selectionReasons,
485
- signals: recommended.signals,
486
- profile,
487
- },
488
- method: {
489
- selected,
490
- recommended: recommended.discipline,
491
- explicit: explicit.discipline !== undefined,
492
- aliasOf: 'discipline',
493
- reasons: selectionReasons,
494
- },
495
- guardrails,
496
- guardrailGroups,
497
- recipe: START_METHOD_RECIPES[selected],
498
- policy,
499
- policyJson,
500
- ...(playbookSet ? { playbookSet } : {}),
501
- ...(playbookNudges ? { playbookNudges } : {}),
502
- startPack: compactPayload({
503
- mode,
504
- discipline: selected,
505
- method: selected,
506
- methodAliasOf: 'discipline',
507
- board,
508
- task: normalize(answers.task),
509
- objective,
510
- planId,
511
- policySeed: {
512
- target: 'mission.policy',
513
- flag: '--policy-json',
514
- json: policy,
515
- jsonString: policyJson,
516
- commandHint: missionRef
517
- ? 'aops-cli mission update --id <mission-id> --policy-json \'<result.mission.policyJson>\' --apply --json'
518
- : 'aops-cli mission create --objective "<objective>" --policy-json \'<result.mission.policyJson>\' --apply --json',
519
- },
520
- orchestration: {
521
- mode: 'read-only-pack',
522
- sideEffects: 'none',
523
- activeBindings: 'deferred',
524
- note: 'start recommends PM/chat/discuss surfaces but does not create or bind records; run deferred commands with --apply to mutate truth surfaces.',
525
- },
526
- checkpoint: {
527
- policyPath: 'mission.policy.checkpoint',
528
- start: checkpointStart,
529
- autoBetweenPhases: checkpointAutoBetweenPhases,
530
- mode: 'nudge-first',
531
- defaultWrite: false,
532
- suggestedActions: checkpointSuggestedActions,
533
- note: 'checkpoint hooks are opt-in nudges; execute the suggested aops-cli checkpoint create command with --apply to write memory.',
534
- },
535
- sync: {
536
- policyPath: 'mission.policy.sync',
537
- mode: 'read-only-cache',
538
- startStatus: true,
539
- startDiff: true,
540
- readOnly: true,
541
- sourceOfTruth: 'hosted-server',
542
- suggestedActions: syncSuggestedActions,
543
- note: 'Server-first: run read-only status/diff at session start. .aops/** is a read-only local cache refreshed from the hosted server; there is no push-back.',
544
- },
545
- playbookSet,
546
- playbookNudges,
547
- planning: {
548
- owner: 'projectman',
549
- surface: 'projectman.implementation-plan.*',
550
- sprintBacked: true,
551
- planId: planId ?? null,
552
- note: 'implementation-plan id is the underlying sprint id',
553
- },
554
- chat: selected === 'build-review-chat' || mode === 'chat-room'
555
- ? {
556
- owner: 'chatv3',
557
- roomSlug: roomSlug ?? null,
558
- note: 'coordination and wake only; PM remains execution/review truth',
559
- }
560
- : undefined,
561
- discuss: selected === 'design-first-consensus'
562
- ? {
563
- owner: 'agentspace.discuss',
564
- note: 'record final stances before implementation when design uncertainty is material',
565
- }
566
- : undefined,
567
- closeout: {
568
- required: true,
569
- trigger: 'explicit',
570
- guardrailIds: profile.closeoutGuardrailIds,
571
- checkCommandHint: 'aops-cli mission check --closeout --id <mission-id> --json',
572
- handoffCommandHint: 'aops-cli mission handoff --id <mission-id> [--complete] --apply --json',
573
- note: 'closeout is the before-leaving phase; deferred-with-owner is valid for unresolved PM truth, and board/room closeout stays operator-only',
574
- },
575
- deferredBindings,
576
- nextCommands: [
577
- missionRef
578
- ? 'aops-cli mission update --id <mission-id> --policy-json \'<result.mission.policyJson>\' --apply --json'
579
- : 'aops-cli mission create --objective "<objective>" --policy-json \'<result.mission.policyJson>\' --apply --json',
580
- planId
581
- ? `aops-cli plan get --id ${planId} --json`
582
- : 'aops-cli plan create --task <task-id> --name "<name>" --goal "<goal>" --apply --json',
583
- selected === 'build-review-chat'
584
- ? 'aops-cli pm review-request create --review-scope sprint:<plan-id> --target-agent <reviewer> --apply --json'
585
- : undefined,
586
- selected === 'design-first-consensus'
587
- ? 'aops-cli discuss start --title "<decision>" --question "<question>" --apply --json'
588
- : undefined,
589
- syncStatusCommand,
590
- syncDiffCommand,
591
- ...playbookSuggestedActions.map((action) => action.command),
592
- ...checkpointSuggestedActions.map((action) => action.command),
593
- ].filter(Boolean),
594
- }),
595
- };
596
- }
597
214
  function buildPromptRef(prompt, params) {
598
215
  return {
599
216
  bytes: Buffer.byteLength(prompt, 'utf8'),
@@ -610,12 +227,6 @@ function compactStartGuardrail(guardrail) {
610
227
  enforcementLevel: guardrail.enforcementLevel,
611
228
  });
612
229
  }
613
- function compactStartGuardrailGroups(groups) {
614
- return compactPayload({
615
- execution: groups.execution.map(compactStartGuardrail),
616
- closeout: groups.closeout.map(compactStartGuardrail),
617
- });
618
- }
619
230
  function compactStartProfile(profile) {
620
231
  return compactPayload({
621
232
  id: profile.id,
@@ -631,7 +242,6 @@ function compactPolicySeed(seed) {
631
242
  target: record.target,
632
243
  flag: record.flag,
633
244
  commandHint: record.commandHint,
634
- jsonRef: 'result.mission.policyJson',
635
245
  });
636
246
  }
637
247
  function compactStartPack(startPack) {
@@ -699,49 +309,6 @@ function compactResumePack(resumePack) {
699
309
  playbookRef: 'result.sessionGuidance.layers.playbooks',
700
310
  });
701
311
  }
702
- function compactStartMissionPack(mission, params) {
703
- return compactPayload({
704
- state: mission.state,
705
- mission: mission.mission,
706
- resumePack: compactResumePack(mission.resumePack),
707
- discipline: compactPayload({
708
- selected: mission.discipline.selected,
709
- recommended: mission.discipline.recommended,
710
- explicit: mission.discipline.explicit,
711
- selectedBy: mission.discipline.selectedBy,
712
- reasons: mission.discipline.reasons,
713
- signals: mission.discipline.signals,
714
- profile: compactStartProfile(mission.discipline.profile),
715
- }),
716
- method: compactPayload({
717
- selected: mission.method.selected,
718
- recommended: mission.method.recommended,
719
- explicit: mission.method.explicit,
720
- aliasOf: mission.method.aliasOf,
721
- reasons: mission.method.reasons,
722
- }),
723
- guardrailGroups: compactStartGuardrailGroups(mission.guardrailGroups),
724
- recipe: mission.recipe,
725
- policyJson: mission.policyJson,
726
- policyRef: 'mission.policyJson',
727
- startPack: compactStartPack(mission.startPack),
728
- sessionGuidance: params.includeSessionGuidance ? mission.sessionGuidance : undefined,
729
- sessionGuidanceRef: params.includeSessionGuidance ? undefined : 'result.sessionGuidance',
730
- });
731
- }
732
- function appendMissionPackToPrompt(prompt, mission) {
733
- const compactMission = compactStartMissionPack(mission, { includeSessionGuidance: true });
734
- return `${prompt.trimEnd()}
735
-
736
- ## Mission Orchestration Pack (read-only)
737
-
738
- Use this compact pack to choose the working discipline and PM/chat/discuss surfaces. \`discipline\` is the canonical policy preset; \`method\` is kept beside it as a compatibility alias. \`start\` is read-only in this v1 path: it does not create plans, bind chat rooms, open discuss topics, promote playbooks, or run sync by itself. Read \`sessionGuidance\` first for layered rules L1-L3: runtime rules, working-discipline guardrails, accepted playbooks, and ranked experience briefs. Read \`startPack.sync\`: run the read-only sync status/diff commands at session start to compare the local cache against the hosted server. Server-first: the hosted aops-server is the source of truth and \`.aops/**\` is a read-only local cache; there is no push-back from the cache. \`policyJson\` is the single mission-policy seed; \`startPack.policySeed.jsonRef\` points back to it instead of duplicating it. Treat \`deferredBindings\` as the apply-required follow-up list, and write Projectman records for durable task state.
739
-
740
- \`\`\`json
741
- ${JSON.stringify(compactMission, null, 2)}
742
- \`\`\`
743
- `;
744
- }
745
312
  function isMultiAgentMode(mode) {
746
313
  return mode !== undefined && MULTI_AGENT_MODES.has(mode);
747
314
  }
@@ -906,7 +473,6 @@ function collectAnswers(options) {
906
473
  roomSlug: normalize(options.roomSlug),
907
474
  roomTitle: normalize(options.roomTitle),
908
475
  roles: normalize(options.roles),
909
- mission: normalize(options.mission),
910
476
  resume: normalize(options.resume),
911
477
  objective: normalize(options.objective),
912
478
  discipline: normalize(options.discipline),
@@ -920,31 +486,6 @@ function collectAnswers(options) {
920
486
  checkpointAutoBetweenPhases: options.checkpointAutoBetweenPhases,
921
487
  };
922
488
  }
923
- async function loadStartMissionResumePack(options, answers, activeProject) {
924
- const missionId = normalize(answers.resume);
925
- if (!missionId)
926
- return undefined;
927
- const loaded = await loadMissionResumePack({
928
- apiBaseUrl: options.apiBaseUrl,
929
- accessToken: options.accessToken,
930
- refreshToken: options.refreshToken,
931
- timeoutMs: options.timeoutMs,
932
- tenantId: options.tenantId,
933
- locale: options.locale,
934
- fallbackLocale: options.fallbackLocale,
935
- scopeId: normalize(options.scopeId) ?? normalize(activeProject?.scopeId) ?? normalize(activeProject?.projectId),
936
- scopeResolution: options.scopeResolution,
937
- projectId: normalize(options.projectId) ?? normalize(activeProject?.projectId),
938
- projectName: normalize(options.projectName),
939
- id: missionId,
940
- depth: normalize(options.missionResumeDepth) ?? 'light',
941
- limit: options.missionResumeLimit ?? 8,
942
- full: options.missionResumeFull,
943
- });
944
- if (!loaded)
945
- throw new Error('Mission resume pack could not be loaded. Check host availability/auth and retry.');
946
- return loaded;
947
- }
948
489
  function missingQuestions(answers, questions) {
949
490
  return questions.filter((question) => question.required && normalize(answers[question.key]) === undefined);
950
491
  }
@@ -998,17 +539,16 @@ export async function composeStart(options = {}) {
998
539
  depth: 'light',
999
540
  });
1000
541
  const memoryBrief = memoryBriefResultFromEnvelope(memoryBriefEnvelope);
1001
- const activePlaybookMissionId = normalize(answers.resume) ?? normalize(answers.mission);
1002
542
  const playbookNudges = await buildReadOnlyActivePlaybookNudgePackFromContext({
1003
543
  repoRoot: rootDir,
1004
544
  localRoot: activeProject?.localRoot,
1005
545
  projectSlug,
1006
- }, {
1007
- missionId: activePlaybookMissionId,
1008
- });
546
+ }, {});
1009
547
  const playbookSet = playbookNudges.project;
1010
- const missionResumePack = await loadStartMissionResumePack(options, answers, activeProject);
1011
- const missionBase = buildStartMissionPack(answers, { projectSlug, resumePack: missionResumePack, playbookSet, playbookNudges });
548
+ const recommendedDiscipline = recommendStartDiscipline(answers);
549
+ const explicitDiscipline = resolveExplicitDiscipline(answers);
550
+ const selectedDiscipline = explicitDiscipline.discipline ?? recommendedDiscipline.discipline;
551
+ const disciplineGuardrails = startGuardrailsForDiscipline(selectedDiscipline);
1012
552
  const sessionGuidance = await buildSessionGuidancePack({
1013
553
  repoRoot: rootDir,
1014
554
  localRoot: activeProject?.localRoot,
@@ -1016,29 +556,20 @@ export async function composeStart(options = {}) {
1016
556
  }, {
1017
557
  surface: 'start',
1018
558
  task: normalize(answers.task) ?? normalize(answers.objective),
1019
- missionId: normalize(answers.resume) ?? normalize(answers.mission),
1020
559
  planId: normalize(answers.plan),
1021
560
  area: normalize(options.area),
1022
561
  limit: options.limit,
1023
562
  playbookNudges,
1024
563
  discipline: {
1025
- selected: missionBase.discipline.selected,
1026
- recommended: missionBase.discipline.recommended,
1027
- explicit: missionBase.discipline.explicit,
1028
- profile: missionBase.discipline.profile,
1029
- guardrails: missionBase.guardrails,
564
+ selected: selectedDiscipline,
565
+ recommended: recommendedDiscipline.discipline,
566
+ explicit: explicitDiscipline.discipline !== undefined,
567
+ profile: START_DISCIPLINE_PROFILES[selectedDiscipline],
568
+ guardrails: disciplineGuardrails,
1030
569
  },
1031
570
  });
1032
- const mission = {
1033
- ...missionBase,
1034
- sessionGuidance,
1035
- startPack: compactPayload({
1036
- ...missionBase.startPack,
1037
- sessionGuidance,
1038
- }),
1039
- };
1040
571
  const composed = composeStartPrompt(body, answers, projectSlug, memoryBrief);
1041
- const prompt = appendMissionPackToPrompt(composed.prompt, mission);
572
+ const prompt = composed.prompt;
1042
573
  const warnings = composed.warnings;
1043
574
  let outFile;
1044
575
  if (normalize(options.out)) {
@@ -1047,7 +578,7 @@ export async function composeStart(options = {}) {
1047
578
  await fs.writeFile(outFile, prompt, 'utf-8');
1048
579
  }
1049
580
  const promptRef = buildPromptRef(prompt, { path: outFile, inline: true });
1050
- return { ...base, status: 'ready', missing: [], warnings, memoryBrief, mission, sessionGuidance, prompt, promptRef, outFile };
581
+ return { ...base, status: 'ready', missing: [], warnings, memoryBrief, sessionGuidance, prompt, promptRef, outFile };
1051
582
  }
1052
583
  export async function composeStartReminder(options = {}) {
1053
584
  assertSupportedMode(normalize(options.mode));
@@ -1073,7 +604,6 @@ export async function composeStartReminder(options = {}) {
1073
604
  localRoot: activeProject?.localRoot,
1074
605
  projectSlug,
1075
606
  }, {
1076
- missionId: normalize(answers.resume) ?? normalize(answers.mission),
1077
607
  limit: parsePositiveInteger(options.limit),
1078
608
  });
1079
609
  const guardrails = startGuardrailsForDiscipline(selected);
@@ -1085,7 +615,6 @@ export async function composeStartReminder(options = {}) {
1085
615
  }, {
1086
616
  surface: 'start-reminder',
1087
617
  task: normalize(answers.task) ?? normalize(answers.objective),
1088
- missionId: normalize(answers.resume) ?? normalize(answers.mission),
1089
618
  planId: normalize(answers.plan),
1090
619
  area: normalize(options.area),
1091
620
  limit: options.limit,
@@ -1131,15 +660,8 @@ function serializableStartResult(result, params) {
1131
660
  : undefined,
1132
661
  outFile: result.outFile,
1133
662
  };
1134
- if (params.compact) {
1135
- return {
1136
- ...base,
1137
- mission: result.mission ? compactStartMissionPack(result.mission, { includeSessionGuidance: false }) : undefined,
1138
- };
1139
- }
1140
663
  return {
1141
664
  ...base,
1142
- mission: result.mission,
1143
665
  prompt: result.prompt,
1144
666
  };
1145
667
  }
@@ -1204,9 +726,7 @@ export function makeStartCommand() {
1204
726
  .option('--room-slug <slug>', 'Hosted chat room slug (chat-room mode)')
1205
727
  .option('--room-title <title>', 'Hosted chat room title (chat-room mode)')
1206
728
  .option('--roles <list>', 'Operator-assigned roles, e.g. "claude=implementer, codex=reviewer, mzs=operator"')
1207
- .option('--mission <ref>', 'Mission id or title to resume/define in the startup pack')
1208
- .option('--resume <mission-id>', 'Hosted mission id to resume; embeds a compact mission resume pack')
1209
- .option('--objective <text>', 'Mission objective override; defaults to --task when omitted')
729
+ .option('--objective <text>', 'Objective override; defaults to --task when omitted')
1210
730
  .option('--discipline <discipline>', `Working discipline: ${START_DISCIPLINES.join(' | ')}`)
1211
731
  .option('--method <method>', `Compatibility alias for --discipline: ${START_METHODS.join(' | ')}`)
1212
732
  .option('--work-size <size>', 'Work size signal for method recommendation: small | medium | large')
@@ -1214,16 +734,13 @@ export function makeStartCommand() {
1214
734
  .option('--decision-uncertainty <level>', 'Decision uncertainty signal: low | medium | high')
1215
735
  .option('--operator-interface <shape>', 'Operator interface signal: direct | delegated (delegated recommends coordinator-loop)')
1216
736
  .option('--plan <id>', 'Existing implementation-plan id; this is the underlying sprint id')
1217
- .option('--checkpoint-start', 'Seed mission.policy.checkpoint.start=true and surface a checkpoint create suggested action; start remains read-only')
1218
- .option('--checkpoint-auto-between-phases', 'Seed mission.policy.checkpoint.autoBetweenPhases=true and surface phase-transition checkpoint nudges')
1219
- .option('--mission-resume-depth <depth>', 'Hosted mission resume depth: light | standard', 'light')
1220
- .option('--mission-resume-limit <n>', 'Maximum refs/rows for the compact hosted mission resume pack', '8')
1221
- .option('--mission-resume-full', 'Embed the full hosted mission resume skeleton instead of the compact summary')
737
+ .option('--checkpoint-start', 'Seed checkpoint.start=true and surface a checkpoint create suggested action; start remains read-only')
738
+ .option('--checkpoint-auto-between-phases', 'Seed checkpoint.autoBetweenPhases=true and surface phase-transition checkpoint nudges')
1222
739
  .option('--reminder', 'Build a bounded read-only session guidance reminder pack instead of the full kickoff prompt')
1223
740
  .option('--area <area>', 'Area hint for reminder/session guidance experience ranking')
1224
741
  .option('--limit <n>', 'Maximum experience briefs in session guidance; default 3, max 5')
1225
742
  .option('--compact', 'Use compact JSON output with promptRef instead of inline prompt (default for --json)')
1226
- .option('--full-output', 'With --json, include the full composed prompt and uncompact mission payload')
743
+ .option('--full-output', 'With --json, include the full composed prompt and uncompact passion payload')
1227
744
  .option('--root <path>', 'Workspace root override (default: nearest repo config ancestor)')
1228
745
  .option('--out <file>', 'Write the composed prompt to a file')
1229
746
  .option('--no-memory-brief', 'Do not build/embed the read-only local memory cache brief')
@@ -1246,7 +763,6 @@ Examples:
1246
763
  aops-cli start --mode solo --board ops --full-output --json
1247
764
  aops-cli start --reminder --task "continue S1" --area aops-cli --json
1248
765
  aops-cli start --mode chat-room --board ops --discipline build-review-chat --json
1249
- aops-cli start --resume <mission-id> --mode solo --board ops --json
1250
766
  aops-cli start --mode chat-room --board ops \\
1251
767
  --room-slug ops-room --room-title "Ops" \\
1252
768
  --roles "claude=implementer, codex=reviewer, mzs=operator" --json
@@ -1263,7 +779,7 @@ Agent flow:
1263
779
  after meaningful progress.
1264
780
  `);
1265
781
  applyCommonOptions(cmd, { withProject: true });
1266
- cmd.option('--scope-id <id>', 'Canonical owner scope override for hosted mission resume');
782
+ cmd.option('--scope-id <id>', 'Canonical owner scope override');
1267
783
  cmd.option('--scope-resolution <mode>', 'Scope resolution for hosted reads: explicit | cascade');
1268
784
  cmd.option('--tenant-id <id>', 'Tenant id header (x-tenant-id)');
1269
785
  cmd.option('--locale <locale>', 'Locale header (x-locale)');