@kynetic-ai/spec 0.10.0 → 0.12.0
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 +55 -455
- package/dist/agent-runtime/bootstrap.d.ts +31 -0
- package/dist/agent-runtime/bootstrap.d.ts.map +1 -0
- package/dist/agent-runtime/bootstrap.js +302 -0
- package/dist/agent-runtime/bootstrap.js.map +1 -0
- package/dist/agent-runtime/dispatch.d.ts +150 -10
- package/dist/agent-runtime/dispatch.d.ts.map +1 -1
- package/dist/agent-runtime/dispatch.js +1248 -244
- package/dist/agent-runtime/dispatch.js.map +1 -1
- package/dist/agent-runtime/invocation.d.ts +28 -1
- package/dist/agent-runtime/invocation.d.ts.map +1 -1
- package/dist/agent-runtime/invocation.js +172 -60
- package/dist/agent-runtime/invocation.js.map +1 -1
- package/dist/agent-runtime/prompts.d.ts +9 -0
- package/dist/agent-runtime/prompts.d.ts.map +1 -1
- package/dist/agent-runtime/prompts.js +42 -7
- package/dist/agent-runtime/prompts.js.map +1 -1
- package/dist/agent-runtime/session-event-accumulator.d.ts +83 -0
- package/dist/agent-runtime/session-event-accumulator.d.ts.map +1 -0
- package/dist/agent-runtime/session-event-accumulator.js +203 -0
- package/dist/agent-runtime/session-event-accumulator.js.map +1 -0
- package/dist/agent-runtime/session-event-types.d.ts +67 -0
- package/dist/agent-runtime/session-event-types.d.ts.map +1 -0
- package/dist/agent-runtime/session-event-types.js +13 -0
- package/dist/agent-runtime/session-event-types.js.map +1 -0
- package/dist/agent-runtime/workspace.d.ts +244 -0
- package/dist/agent-runtime/workspace.d.ts.map +1 -0
- package/dist/agent-runtime/workspace.js +2025 -0
- package/dist/agent-runtime/workspace.js.map +1 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/adapters.js +58 -13
- package/dist/agents/adapters.js.map +1 -1
- package/dist/agents/spawner.d.ts +8 -0
- package/dist/agents/spawner.d.ts.map +1 -1
- package/dist/agents/spawner.js +25 -3
- package/dist/agents/spawner.js.map +1 -1
- package/dist/cli/batch-exec.js +1 -1
- package/dist/cli/batch-exec.js.map +1 -1
- package/dist/cli/command-annotations.d.ts +15 -3
- package/dist/cli/command-annotations.d.ts.map +1 -1
- package/dist/cli/command-annotations.js +23 -3
- package/dist/cli/command-annotations.js.map +1 -1
- package/dist/cli/commands/agent.d.ts +2 -0
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +144 -27
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +5 -5
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +118 -3
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/guard.d.ts.map +1 -1
- package/dist/cli/commands/guard.js +8 -6
- package/dist/cli/commands/guard.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +20 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/item.d.ts.map +1 -1
- package/dist/cli/commands/item.js +205 -47
- package/dist/cli/commands/item.js.map +1 -1
- package/dist/cli/commands/log.d.ts.map +1 -1
- package/dist/cli/commands/log.js +24 -10
- package/dist/cli/commands/log.js.map +1 -1
- package/dist/cli/commands/meta.d.ts.map +1 -1
- package/dist/cli/commands/meta.js +10 -1
- package/dist/cli/commands/meta.js.map +1 -1
- package/dist/cli/commands/plan-import.d.ts +3 -3
- package/dist/cli/commands/plan-import.d.ts.map +1 -1
- package/dist/cli/commands/plan-import.js +213 -528
- package/dist/cli/commands/plan-import.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +533 -83
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/review.d.ts +14 -0
- package/dist/cli/commands/review.d.ts.map +1 -0
- package/dist/cli/commands/review.js +1142 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +1 -0
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +33 -10
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/session/checkpoint.d.ts +2 -4
- package/dist/cli/commands/session/checkpoint.d.ts.map +1 -1
- package/dist/cli/commands/session/checkpoint.js +6 -107
- package/dist/cli/commands/session/checkpoint.js.map +1 -1
- package/dist/cli/commands/session/commands.d.ts.map +1 -1
- package/dist/cli/commands/session/commands.js +33 -23
- package/dist/cli/commands/session/commands.js.map +1 -1
- package/dist/cli/commands/session/compact.js +4 -4
- package/dist/cli/commands/session/compact.js.map +1 -1
- package/dist/cli/commands/session/create.js +2 -2
- package/dist/cli/commands/session/create.js.map +1 -1
- package/dist/cli/commands/session/format.d.ts.map +1 -1
- package/dist/cli/commands/session/format.js +1 -6
- package/dist/cli/commands/session/format.js.map +1 -1
- package/dist/cli/commands/session/log.d.ts +32 -7
- package/dist/cli/commands/session/log.d.ts.map +1 -1
- package/dist/cli/commands/session/log.js +166 -60
- package/dist/cli/commands/session/log.js.map +1 -1
- package/dist/cli/commands/session/migrate.d.ts +9 -0
- package/dist/cli/commands/session/migrate.d.ts.map +1 -0
- package/dist/cli/commands/session/migrate.js +46 -0
- package/dist/cli/commands/session/migrate.js.map +1 -0
- package/dist/cli/commands/session/stale-close.d.ts.map +1 -1
- package/dist/cli/commands/session/stale-close.js +5 -8
- package/dist/cli/commands/session/stale-close.js.map +1 -1
- package/dist/cli/commands/session/types.d.ts +1 -1
- package/dist/cli/commands/session/types.d.ts.map +1 -1
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +287 -257
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/shadow.d.ts.map +1 -1
- package/dist/cli/commands/shadow.js +147 -31
- package/dist/cli/commands/shadow.js.map +1 -1
- package/dist/cli/commands/skill-crud.d.ts +7 -0
- package/dist/cli/commands/skill-crud.d.ts.map +1 -1
- package/dist/cli/commands/skill-crud.js +41 -18
- package/dist/cli/commands/skill-crud.js.map +1 -1
- package/dist/cli/commands/skill-diff.d.ts.map +1 -1
- package/dist/cli/commands/skill-diff.js +29 -3
- package/dist/cli/commands/skill-diff.js.map +1 -1
- package/dist/cli/commands/skill-install.d.ts.map +1 -1
- package/dist/cli/commands/skill-install.js +5 -4
- package/dist/cli/commands/skill-install.js.map +1 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +359 -49
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/trait.d.ts.map +1 -1
- package/dist/cli/commands/trait.js +5 -27
- package/dist/cli/commands/trait.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +113 -52
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +69 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +26 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +108 -1
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/sync-mode.d.ts +44 -0
- package/dist/cli/sync-mode.d.ts.map +1 -0
- package/dist/cli/sync-mode.js +64 -0
- package/dist/cli/sync-mode.js.map +1 -0
- package/dist/daemon/middleware/project-context.ts +25 -7
- package/dist/daemon/project-context.ts +18 -0
- package/dist/daemon/routes/agent-dispatch.ts +107 -23
- package/dist/daemon/routes/aggregation.ts +184 -0
- package/dist/daemon/routes/inbox.ts +5 -0
- package/dist/daemon/routes/items.ts +167 -0
- package/dist/daemon/routes/meta.ts +141 -1
- package/dist/daemon/routes/plans.ts +147 -0
- package/dist/daemon/routes/projects.ts +28 -6
- package/dist/daemon/routes/ref-resolution.ts +119 -0
- package/dist/daemon/routes/refs.ts +42 -0
- package/dist/daemon/routes/session-related.ts +140 -0
- package/dist/daemon/routes/sessions.ts +581 -0
- package/dist/daemon/routes/tasks.ts +257 -2
- package/dist/daemon/routes/triage.ts +40 -1
- package/dist/daemon/routes/validation.ts +1 -1
- package/dist/daemon/server.ts +165 -50
- package/dist/daemon/session-sync.ts +11 -0
- package/dist/daemon/shadow-sync.ts +11 -0
- package/dist/daemon/watcher.ts +56 -5
- package/dist/daemon/websocket/project-resolution.ts +77 -0
- package/dist/export/json.d.ts.map +1 -1
- package/dist/export/json.js +104 -1
- package/dist/export/json.js.map +1 -1
- package/dist/export/types.d.ts +52 -1
- package/dist/export/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/parser/agent-detection.d.ts +1 -1
- package/dist/parser/agent-detection.d.ts.map +1 -1
- package/dist/parser/agent-detection.js +10 -0
- package/dist/parser/agent-detection.js.map +1 -1
- package/dist/parser/alignment.d.ts.map +1 -1
- package/dist/parser/alignment.js +4 -2
- package/dist/parser/alignment.js.map +1 -1
- package/dist/parser/config.d.ts +397 -2
- package/dist/parser/config.d.ts.map +1 -1
- package/dist/parser/config.js +125 -3
- package/dist/parser/config.js.map +1 -1
- package/dist/parser/dispatch-workspaces.d.ts +18 -0
- package/dist/parser/dispatch-workspaces.d.ts.map +1 -0
- package/dist/parser/dispatch-workspaces.js +209 -0
- package/dist/parser/dispatch-workspaces.js.map +1 -0
- package/dist/parser/doctor.d.ts.map +1 -1
- package/dist/parser/doctor.js +27 -8
- package/dist/parser/doctor.js.map +1 -1
- package/dist/parser/file-lock.d.ts.map +1 -1
- package/dist/parser/file-lock.js +9 -2
- package/dist/parser/file-lock.js.map +1 -1
- package/dist/parser/index.d.ts +6 -0
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +6 -0
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/plans.d.ts.map +1 -1
- package/dist/parser/plans.js +1 -0
- package/dist/parser/plans.js.map +1 -1
- package/dist/parser/refs.d.ts +8 -1
- package/dist/parser/refs.d.ts.map +1 -1
- package/dist/parser/refs.js +27 -1
- package/dist/parser/refs.js.map +1 -1
- package/dist/parser/review-operations.d.ts +72 -0
- package/dist/parser/review-operations.d.ts.map +1 -0
- package/dist/parser/review-operations.js +185 -0
- package/dist/parser/review-operations.js.map +1 -0
- package/dist/parser/review-task-integration.d.ts +78 -0
- package/dist/parser/review-task-integration.d.ts.map +1 -0
- package/dist/parser/review-task-integration.js +173 -0
- package/dist/parser/review-task-integration.js.map +1 -0
- package/dist/parser/review-threads.d.ts +101 -0
- package/dist/parser/review-threads.d.ts.map +1 -0
- package/dist/parser/review-threads.js +222 -0
- package/dist/parser/review-threads.js.map +1 -0
- package/dist/parser/review-validation.d.ts +69 -0
- package/dist/parser/review-validation.d.ts.map +1 -0
- package/dist/parser/review-validation.js +207 -0
- package/dist/parser/review-validation.js.map +1 -0
- package/dist/parser/reviews.d.ts +58 -0
- package/dist/parser/reviews.d.ts.map +1 -0
- package/dist/parser/reviews.js +230 -0
- package/dist/parser/reviews.js.map +1 -0
- package/dist/parser/session-branch.d.ts +91 -0
- package/dist/parser/session-branch.d.ts.map +1 -0
- package/dist/parser/session-branch.js +565 -0
- package/dist/parser/session-branch.js.map +1 -0
- package/dist/parser/session-sync-scheduler.d.ts +53 -0
- package/dist/parser/session-sync-scheduler.d.ts.map +1 -0
- package/dist/parser/session-sync-scheduler.js +100 -0
- package/dist/parser/session-sync-scheduler.js.map +1 -0
- package/dist/parser/setup-status.d.ts +7 -1
- package/dist/parser/setup-status.d.ts.map +1 -1
- package/dist/parser/setup-status.js +104 -39
- package/dist/parser/setup-status.js.map +1 -1
- package/dist/parser/shadow-sync-scheduler.d.ts +71 -0
- package/dist/parser/shadow-sync-scheduler.d.ts.map +1 -0
- package/dist/parser/shadow-sync-scheduler.js +139 -0
- package/dist/parser/shadow-sync-scheduler.js.map +1 -0
- package/dist/parser/shadow.d.ts +121 -14
- package/dist/parser/shadow.d.ts.map +1 -1
- package/dist/parser/shadow.js +752 -27
- package/dist/parser/shadow.js.map +1 -1
- package/dist/parser/skill-render.d.ts +24 -0
- package/dist/parser/skill-render.d.ts.map +1 -1
- package/dist/parser/skill-render.js +98 -26
- package/dist/parser/skill-render.js.map +1 -1
- package/dist/parser/validate.d.ts +43 -3
- package/dist/parser/validate.d.ts.map +1 -1
- package/dist/parser/validate.js +204 -30
- package/dist/parser/validate.js.map +1 -1
- package/dist/parser/yaml.d.ts +47 -11
- package/dist/parser/yaml.d.ts.map +1 -1
- package/dist/parser/yaml.js +329 -149
- package/dist/parser/yaml.js.map +1 -1
- package/dist/review/checks.d.ts +97 -0
- package/dist/review/checks.d.ts.map +1 -0
- package/dist/review/checks.js +175 -0
- package/dist/review/checks.js.map +1 -0
- package/dist/review/index.d.ts +3 -0
- package/dist/review/index.d.ts.map +1 -0
- package/dist/review/index.js +3 -0
- package/dist/review/index.js.map +1 -0
- package/dist/review/subject-bindings.d.ts +83 -0
- package/dist/review/subject-bindings.d.ts.map +1 -0
- package/dist/review/subject-bindings.js +175 -0
- package/dist/review/subject-bindings.js.map +1 -0
- package/dist/schema/common.d.ts +26 -0
- package/dist/schema/common.d.ts.map +1 -1
- package/dist/schema/common.js +13 -0
- package/dist/schema/common.js.map +1 -1
- package/dist/schema/dispatch-workspace.d.ts +2643 -0
- package/dist/schema/dispatch-workspace.d.ts.map +1 -0
- package/dist/schema/dispatch-workspace.js +187 -0
- package/dist/schema/dispatch-workspace.js.map +1 -0
- package/dist/schema/inbox.d.ts +8 -8
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/meta.d.ts +663 -116
- package/dist/schema/meta.d.ts.map +1 -1
- package/dist/schema/meta.js +28 -0
- package/dist/schema/meta.js.map +1 -1
- package/dist/schema/plan.d.ts +30 -19
- package/dist/schema/plan.d.ts.map +1 -1
- package/dist/schema/plan.js +3 -1
- package/dist/schema/plan.js.map +1 -1
- package/dist/schema/review-records.d.ts +2676 -0
- package/dist/schema/review-records.d.ts.map +1 -0
- package/dist/schema/review-records.js +232 -0
- package/dist/schema/review-records.js.map +1 -0
- package/dist/schema/spec.d.ts +32 -14
- package/dist/schema/spec.d.ts.map +1 -1
- package/dist/schema/spec.js +5 -0
- package/dist/schema/spec.js.map +1 -1
- package/dist/schema/task.d.ts +187 -29
- package/dist/schema/task.d.ts.map +1 -1
- package/dist/schema/task.js +12 -2
- package/dist/schema/task.js.map +1 -1
- package/dist/schema/triage.d.ts +22 -22
- package/dist/sessions/cache.d.ts +119 -0
- package/dist/sessions/cache.d.ts.map +1 -0
- package/dist/sessions/cache.js +284 -0
- package/dist/sessions/cache.js.map +1 -0
- package/dist/sessions/index.d.ts +1 -0
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +2 -0
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/legacy.d.ts +77 -0
- package/dist/sessions/legacy.d.ts.map +1 -0
- package/dist/sessions/legacy.js +146 -0
- package/dist/sessions/legacy.js.map +1 -0
- package/dist/sessions/store.d.ts +115 -71
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +357 -182
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +44 -16
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +11 -2
- package/dist/sessions/types.js.map +1 -1
- package/dist/strings/errors.d.ts +32 -0
- package/dist/strings/errors.d.ts.map +1 -1
- package/dist/strings/errors.js +17 -0
- package/dist/strings/errors.js.map +1 -1
- package/dist/strings/labels.d.ts +1 -0
- package/dist/strings/labels.d.ts.map +1 -1
- package/dist/strings/labels.js +1 -0
- package/dist/strings/labels.js.map +1 -1
- package/dist/utils/activity.d.ts +101 -0
- package/dist/utils/activity.d.ts.map +1 -0
- package/dist/utils/activity.js +408 -0
- package/dist/utils/activity.js.map +1 -0
- package/dist/utils/git.d.ts +31 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +87 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/web-ui/_app/immutable/assets/0.tmlwn-Ih.css +1 -0
- package/dist/web-ui/_app/immutable/assets/9.BwwJybWx.css +1 -0
- package/dist/web-ui/_app/immutable/chunks/2KqE8gtn.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/70-t_QvE.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/AiWQj974.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B25nWFyA.js +5 -0
- package/dist/web-ui/_app/immutable/chunks/B2bcA_Q_.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B5e5HYyB.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B7-5z6eA.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B7bGmhK0.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B8tYZKAE.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BFGAyJjD.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BG0850zf.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BG8eSzAd.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BIMxXS8I.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BSzL1fpU.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BYtjHfeq.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/{D1ArdqNb.js → Bp5pFYXL.js} +1 -1
- package/dist/web-ui/_app/immutable/chunks/BsJFsuAT.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BvpNHcD6.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BypqA25-.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/C0w6WDm5.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/C5_PAZ0y.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CDRO15Iv.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CF1CoqD5.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CS2sa4_m.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CWUQwB9H.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CY5FDdSU.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/C_7MTDoj.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CaAJD3dl.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/{i-XnOIX0.js → ChB5iyEL.js} +1 -1
- package/dist/web-ui/_app/immutable/chunks/ChQD-6N8.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/{BCkp8Hs8.js → CqbsoCwA.js} +1 -1
- package/dist/web-ui/_app/immutable/chunks/DCeJW50p.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DJtZNgcs.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DKIeaprD.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DLd2uVIA.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DW_subyT.js +2 -0
- package/dist/web-ui/_app/immutable/chunks/DbU6lVn0.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Dc7ZCC5m.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Dd5umPsk.js +2 -0
- package/dist/web-ui/_app/immutable/chunks/Dg_zDpDS.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Dgqu8Yuc.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DmxsPZTB.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DphTaFUB.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DqK4iHp0.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DqT6OH_u.js +2 -0
- package/dist/web-ui/_app/immutable/chunks/Ds9I9wQb.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Du5ng3u4.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DxJw79Wi.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/GFTX8GgV.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/HNjs76Zz.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/HVMjDi4_.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/P0A_fJvS.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/T3vGWjIL.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/VTmrX9Qu.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Xvwhx_F1.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Yyz1XMQA.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/dh5HeqUr.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/fZMteyca.js +62 -0
- package/dist/web-ui/_app/immutable/chunks/{D28BF5MJ.js → gPrj-hqC.js} +1 -1
- package/dist/web-ui/_app/immutable/chunks/htcWMiYN.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/oTsvd9y4.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/qJfLUwU4.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/xCtiO_JE.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/y4GeEH6k.js +1 -0
- package/dist/web-ui/_app/immutable/entry/app.C4h_eOn6.js +2 -0
- package/dist/web-ui/_app/immutable/entry/start.CQFTf9ep.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/0.Dh1xO970.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/1.l75D3Opx.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/10.DBidBPc-.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/11.Ab0gUKWe.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/12.CMsnoxfs.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/13.D8YKuknB.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/14.DZ0aan7y.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/15.CUIKreDL.js +2 -0
- package/dist/web-ui/_app/immutable/nodes/16.BWc8--BO.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/2.CDUonbuh.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/3.Ctg3M00i.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/4.Ci-JDwbA.js +2 -0
- package/dist/web-ui/_app/immutable/nodes/5.CTyEDAq0.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/6.BTZZqsAb.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/7.BI52g_Jo.js +137 -0
- package/dist/web-ui/_app/immutable/nodes/8.3hZPaB9x.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/9.DS49kvwl.js +29 -0
- package/dist/web-ui/_app/version.json +1 -1
- package/dist/web-ui/favicon-192.png +0 -0
- package/dist/web-ui/favicon-32.png +0 -0
- package/dist/web-ui/favicon.ico +0 -0
- package/dist/web-ui/index.html +14 -11
- package/package.json +14 -7
- package/plugin/.claude-plugin/marketplace.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/plugins/kspec/skills/merge/SKILL.md +127 -0
- package/plugin/plugins/kspec/skills/plan/SKILL.md +55 -26
- package/plugin/plugins/kspec/skills/review/SKILL.md +350 -133
- package/plugin/plugins/kspec/skills/task-work/SKILL.md +96 -106
- package/templates/agents-sections/04-pr-workflow.md +15 -12
- package/templates/agents-sections/06-ralph-loop.md +15 -10
- package/templates/skills/manifest.yaml +25 -7
- package/templates/skills/merge/SKILL.md +120 -0
- package/templates/skills/plan/SKILL.md +55 -26
- package/templates/skills/review/SKILL.md +346 -130
- package/templates/skills/task-work/SKILL.md +93 -103
- package/dist/web-ui/_app/immutable/assets/0.BxCxvrZR.css +0 -1
- package/dist/web-ui/_app/immutable/chunks/B-CZR0q8.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/B1IR5Su5.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/B_Cvvtc4.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/BtFaGGII.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/Bu8JVsCH.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/C87u-CNA.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/CrFkBTYp.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/D6RtLpzL.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/D7FHSgx2.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DBXrsxZQ.js +0 -2
- package/dist/web-ui/_app/immutable/chunks/Da_hHMuA.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/Do6LchSF.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DoNPtcAw.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DtUbXRZz.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DyFPRlLl.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DzAP8lRM.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DzVXElzN.js +0 -2
- package/dist/web-ui/_app/immutable/chunks/aoPBFken.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/laxtrUO3.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/q1nIWgqB.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/sTLbk5Nm.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/vwKgQu5P.js +0 -5
- package/dist/web-ui/_app/immutable/entry/app.BCwMcqnT.js +0 -2
- package/dist/web-ui/_app/immutable/entry/start.wKCQH-tt.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/0.CjGVMG74.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/1.B6_AIPan.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/2.q4oCS7Ws.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/3.rTKZf9o2.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/4.DVIDRu1d.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/5.8PtPXIOd.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/6.ZZrTemy_.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/7.IP-gxCxi.js +0 -1
package/README.md
CHANGED
|
@@ -1,497 +1,97 @@
|
|
|
1
|
-
#
|
|
1
|
+
# kspec
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
>
|
|
5
|
-
> This project is a work-in-progress and is not ready for production use. APIs, file formats, and CLI commands may change without notice. Use at your own risk.
|
|
6
|
-
>
|
|
7
|
-
> If you're interested in the project, feel free to explore the code and design docs, but please don't depend on it for real work yet.
|
|
3
|
+
`kspec` is spec-first task management for AI-assisted development.
|
|
8
4
|
|
|
9
|
-
|
|
5
|
+
It gives you a durable spec tree, linked implementation tasks, and a shadow-branch workflow that keeps project planning state out of your main git history. The result is a tighter loop between "what should exist", "what is being worked on", and "what shipped".
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
> Early-stage software: expect rough edges and command/API changes while the workflow stabilizes.
|
|
12
8
|
|
|
13
|
-
##
|
|
9
|
+
## Why teams use it
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
- Define features and requirements before implementation.
|
|
12
|
+
- Derive tasks directly from specs instead of duplicating intent in tickets.
|
|
13
|
+
- Keep spec and task state in a separate `kspec-meta` branch via the `.kspec/` worktree.
|
|
14
|
+
- Give human and AI contributors the same project context through `kspec session start` and generated agent instructions.
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
# Clone and install
|
|
19
|
-
git clone <repo-url>
|
|
20
|
-
cd kynetic-spec
|
|
21
|
-
npm install
|
|
22
|
-
|
|
23
|
-
# Run with npm (recommended - works from any project directory)
|
|
24
|
-
npm run dev -- <command>
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### Build and Link Globally
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
npm run build
|
|
31
|
-
npm link
|
|
32
|
-
|
|
33
|
-
# Now available as 'kspec' globally
|
|
34
|
-
kspec tasks ready
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Basic Usage
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
# Initialize a new project
|
|
41
|
-
kspec init
|
|
42
|
-
|
|
43
|
-
# See what tasks are ready to work on
|
|
44
|
-
kspec tasks ready
|
|
45
|
-
|
|
46
|
-
# Task lifecycle
|
|
47
|
-
kspec task start @task-slug
|
|
48
|
-
kspec task note @task-slug "What you're doing..."
|
|
49
|
-
kspec task submit @task-slug # Code done, PR created
|
|
50
|
-
kspec task complete @task-slug --reason "Summary"
|
|
51
|
-
|
|
52
|
-
# Capture ideas
|
|
53
|
-
kspec inbox add "idea or random thought"
|
|
54
|
-
|
|
55
|
-
# Validate spec files
|
|
56
|
-
kspec validate
|
|
57
|
-
|
|
58
|
-
# Search across everything
|
|
59
|
-
kspec search "pattern"
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Agent Integration
|
|
63
|
-
|
|
64
|
-
kspec is agent-agnostic but designed to work well with AI coding assistants. The key integration point is **author attribution** for notes.
|
|
65
|
-
|
|
66
|
-
### Quick Setup
|
|
67
|
-
|
|
68
|
-
Run the setup command to auto-configure your agent environment:
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
kspec setup # Auto-detect and configure
|
|
72
|
-
kspec setup --dry-run # Preview what would be done
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
The setup command detects which agent you're running in and installs the appropriate configuration.
|
|
76
|
-
|
|
77
|
-
**Supported agents:**
|
|
78
|
-
- Claude Code (`CLAUDE_PROJECT_DIR`)
|
|
79
|
-
- Cline (`CLINE_ACTIVE`)
|
|
80
|
-
- Gemini CLI (`GEMINI_CLI`)
|
|
81
|
-
- Codex CLI (`CODEX_SANDBOX`)
|
|
82
|
-
- Aider (`AIDER_MODEL`)
|
|
83
|
-
- OpenCode (`OPENCODE_CONFIG_DIR`)
|
|
84
|
-
- Amp (`AMP_API_KEY`)
|
|
85
|
-
- GitHub Copilot CLI
|
|
86
|
-
|
|
87
|
-
### How Author Detection Works
|
|
88
|
-
|
|
89
|
-
When adding notes, kspec auto-detects the author using this fallback chain:
|
|
90
|
-
|
|
91
|
-
1. `KSPEC_AUTHOR` environment variable (explicit config)
|
|
92
|
-
2. `git config user.name` (developer identity)
|
|
93
|
-
3. `USER`/`USERNAME` env var (system user)
|
|
16
|
+
## Quick start
|
|
94
17
|
|
|
95
|
-
|
|
18
|
+
Install `kspec`:
|
|
96
19
|
|
|
97
|
-
If auto-setup doesn't work, configure manually:
|
|
98
|
-
|
|
99
|
-
**Claude Code** - Add to `~/.claude/settings.json`:
|
|
100
|
-
```json
|
|
101
|
-
{
|
|
102
|
-
"env": {
|
|
103
|
-
"KSPEC_AUTHOR": "@claude"
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
**Aider** - Add to `~/.aider.conf.yml`:
|
|
109
|
-
```yaml
|
|
110
|
-
env:
|
|
111
|
-
KSPEC_AUTHOR: "@aider"
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**Other agents** - Set in shell profile:
|
|
115
20
|
```bash
|
|
116
|
-
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
Convention: Use `@` prefix for agent authors (e.g., `@claude`, `@copilot`) to distinguish from human authors.
|
|
120
|
-
|
|
121
|
-
## References
|
|
122
|
-
|
|
123
|
-
All items (tasks, spec items, inbox, plans) can be referenced by:
|
|
124
|
-
- **Full ULID**: `01KEYQSD2QJCNGRKSR38V0E3BM`
|
|
125
|
-
- **Short ULID**: `01KEYQSD` (unique prefix)
|
|
126
|
-
- **Slug**: `@my-task-slug`
|
|
127
|
-
|
|
128
|
-
## Task Management
|
|
129
|
-
|
|
130
|
-
### Task States
|
|
131
|
-
|
|
21
|
+
npm install -g @kynetic-ai/spec
|
|
132
22
|
```
|
|
133
|
-
pending → in_progress → pending_review → completed
|
|
134
|
-
↓ ↓
|
|
135
|
-
blocked ←──────────┘
|
|
136
|
-
↓
|
|
137
|
-
cancelled
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**State transitions:**
|
|
141
|
-
- `kspec task start` → `in_progress`
|
|
142
|
-
- `kspec task submit` → `pending_review` (code done, awaiting merge)
|
|
143
|
-
- `kspec task complete` → `completed` (from `pending_review`)
|
|
144
|
-
- `kspec task complete --skip-review --reason "..."` → `completed` (bypass review requirement)
|
|
145
|
-
- `kspec task complete --force` → `completed` (even if blocked)
|
|
146
|
-
- `kspec task block` → `blocked`
|
|
147
|
-
- `kspec task unblock` → `pending`
|
|
148
|
-
- `kspec task cancel` → `cancelled`
|
|
149
23
|
|
|
150
|
-
|
|
24
|
+
Or run it without a global install:
|
|
151
25
|
|
|
152
26
|
```bash
|
|
153
|
-
|
|
154
|
-
kspec tasks list # All tasks
|
|
155
|
-
kspec tasks list --status pending # Filter by status
|
|
156
|
-
kspec tasks list --tag mvp # Filter by tag
|
|
157
|
-
kspec tasks list --count # Count only
|
|
158
|
-
kspec tasks ready # Tasks ready to work on
|
|
159
|
-
kspec tasks next # Highest priority ready task
|
|
160
|
-
kspec tasks blocked # Blocked tasks
|
|
161
|
-
kspec tasks in-progress # Active tasks
|
|
162
|
-
|
|
163
|
-
# Task operations
|
|
164
|
-
kspec task get <ref> # View details
|
|
165
|
-
kspec task start <ref> # Begin work
|
|
166
|
-
kspec task submit <ref> # Submit for review
|
|
167
|
-
kspec task complete <ref> # Mark done
|
|
168
|
-
kspec task complete --force <ref> # Force complete from any state
|
|
169
|
-
kspec task block <ref> --reason "..." # Block with reason
|
|
170
|
-
kspec task unblock <ref> # Remove block
|
|
171
|
-
kspec task cancel <ref> # Cancel task
|
|
172
|
-
kspec task reset <ref> # Reset to pending
|
|
173
|
-
kspec task delete <ref> # Delete permanently
|
|
174
|
-
|
|
175
|
-
# Notes and todos
|
|
176
|
-
kspec task note <ref> "message" # Add note
|
|
177
|
-
kspec task notes <ref> # View notes
|
|
178
|
-
kspec task todo add <ref> "text" # Add a todo item
|
|
179
|
-
kspec task todos <ref> # View todos
|
|
180
|
-
|
|
181
|
-
# Create tasks
|
|
182
|
-
kspec task add --title "My task" --priority 2 --slug my-task
|
|
183
|
-
kspec task add --title "Bug fix" --type bug --spec-ref @feature --tag urgent
|
|
184
|
-
|
|
185
|
-
# Update tasks
|
|
186
|
-
kspec task set <ref> --priority 1 --tag critical
|
|
187
|
-
kspec task set <ref> --depends-on @other-task
|
|
27
|
+
npx @kynetic-ai/spec --help
|
|
188
28
|
```
|
|
189
29
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
Spec items define WHAT to build — features, requirements, constraints.
|
|
30
|
+
Initialize a project:
|
|
193
31
|
|
|
194
32
|
```bash
|
|
195
|
-
|
|
196
|
-
kspec
|
|
197
|
-
kspec
|
|
198
|
-
kspec item list --tree # Hierarchical view
|
|
199
|
-
kspec item list --count # Count only
|
|
200
|
-
kspec item types # Item types and counts
|
|
201
|
-
kspec item tags # Tags and counts
|
|
202
|
-
|
|
203
|
-
# View details
|
|
204
|
-
kspec item get <ref> # Item details
|
|
205
|
-
kspec item status <ref> # Implementation status + linked tasks
|
|
206
|
-
|
|
207
|
-
# Create items (--under is required)
|
|
208
|
-
kspec item add --under @parent --title "My Feature" --type feature --slug my-feature
|
|
209
|
-
kspec item add --under @parent --title "Sub-feature" --type requirement
|
|
210
|
-
kspec item add --under @parent --title "Auditable" --type constraint --trait @trait-ref
|
|
211
|
-
|
|
212
|
-
# Trait lifecycle
|
|
213
|
-
kspec trait list # Discover available traits
|
|
214
|
-
kspec trait get <ref> # Trait details and ACs
|
|
215
|
-
kspec trait add "Trait Name" --description "..." --slug my-trait
|
|
216
|
-
|
|
217
|
-
# Update items
|
|
218
|
-
kspec item set <ref> --title "New Title" --priority 1
|
|
219
|
-
kspec item set <ref> --relates-to @other-item # Add relationship
|
|
220
|
-
kspec item set <ref> --implements @parent-item # Add implements link
|
|
221
|
-
kspec item set <ref> --depends-on @dependency # Add dependency
|
|
222
|
-
kspec item set <ref> --clear-relates-to # Clear relationships
|
|
223
|
-
|
|
224
|
-
# Notes
|
|
225
|
-
kspec item note <ref> "Design rationale..."
|
|
226
|
-
kspec item notes <ref>
|
|
227
|
-
|
|
228
|
-
# Acceptance criteria
|
|
229
|
-
kspec item ac list <ref>
|
|
230
|
-
kspec item ac add <ref> --given "user is logged in" --when "they click logout" --then "session ends"
|
|
231
|
-
kspec item ac set <ref> ac-1 --then "updated expectation"
|
|
232
|
-
kspec item ac remove <ref> ac-1
|
|
233
|
-
|
|
234
|
-
# Traits
|
|
235
|
-
kspec item trait add <ref> @trait-a @trait-b
|
|
236
|
-
kspec item trait remove <ref> @trait-a
|
|
237
|
-
|
|
238
|
-
# Derive implementation task from spec
|
|
239
|
-
kspec derive <ref> # Create task from spec item
|
|
240
|
-
kspec derive --all --dry-run # Preview tasks for all unlinked specs
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
## Inbox
|
|
244
|
-
|
|
245
|
-
Low-friction capture for ideas that aren't yet tasks.
|
|
246
|
-
|
|
247
|
-
```bash
|
|
248
|
-
kspec inbox add "idea or random thought" # Capture
|
|
249
|
-
kspec inbox add "tagged idea" --tag dx --tag cli # With tags
|
|
250
|
-
kspec inbox list # Show items (oldest first)
|
|
251
|
-
kspec inbox list --newest --limit 5 # Recent items
|
|
252
|
-
kspec inbox list --tag dx # Filter by tag
|
|
253
|
-
kspec inbox list --count # Count only
|
|
254
|
-
kspec inbox get <ref> # View details
|
|
255
|
-
|
|
256
|
-
# Edit items
|
|
257
|
-
kspec inbox set <ref> --content "updated text" # Update content
|
|
258
|
-
kspec inbox set <ref> --tag new-tag # Add tags
|
|
259
|
-
kspec inbox set <ref> --clear-tags # Remove all tags
|
|
260
|
-
kspec inbox note <ref> "additional context" # Append a note
|
|
261
|
-
|
|
262
|
-
# Convert to task
|
|
263
|
-
kspec inbox promote <ref> --title "Task title"
|
|
264
|
-
kspec inbox promote <ref> --title "Task" --priority 2 --note "Context from triage"
|
|
265
|
-
|
|
266
|
-
# Remove
|
|
267
|
-
kspec inbox delete <ref>
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
## Plans
|
|
271
|
-
|
|
272
|
-
Plans capture implementation context and rationale. They can auto-generate specs and tasks from structured markdown.
|
|
273
|
-
|
|
274
|
-
```bash
|
|
275
|
-
# Create plans
|
|
276
|
-
kspec plan add --title "Feature Name" --content "Description..."
|
|
277
|
-
kspec plan add --title "Feature Name" --content-file ./plan.md
|
|
278
|
-
|
|
279
|
-
# Import structured plan (auto-creates specs and tasks)
|
|
280
|
-
kspec plan import ./plan.md --module @target-module --dry-run # Preview
|
|
281
|
-
kspec plan import ./plan.md --module @target-module # Execute
|
|
282
|
-
kspec plan import ./plan.md --module @target-module --update # Re-import
|
|
283
|
-
|
|
284
|
-
# Manage plans
|
|
285
|
-
kspec plan list # List all plans
|
|
286
|
-
kspec plan get <ref> # View details
|
|
287
|
-
kspec plan set <ref> --status active # Update status
|
|
288
|
-
kspec plan note <ref> "Progress..." # Add note
|
|
289
|
-
kspec plan derive <ref> # Create task from plan
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
## Validation
|
|
293
|
-
|
|
294
|
-
Validate spec files for schema conformance, reference integrity, and alignment.
|
|
295
|
-
|
|
296
|
-
```bash
|
|
297
|
-
kspec validate # Full validation
|
|
298
|
-
kspec validate --schema # Schema conformance only
|
|
299
|
-
kspec validate --refs # Reference resolution only
|
|
300
|
-
kspec validate --alignment # Spec-task alignment
|
|
301
|
-
kspec validate --completeness # Spec completeness
|
|
302
|
-
kspec validate --orphans # Orphaned items
|
|
303
|
-
kspec validate --strict # Treat warnings as errors
|
|
304
|
-
kspec validate --warnings-ok # Treat warnings-only as success (exit 0)
|
|
305
|
-
kspec validate --fix # Auto-fix (invalid ULIDs, missing timestamps)
|
|
306
|
-
kspec validate -v # Verbose output
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
**Exit codes:** `0` = success, `4` = validation errors, `6` = warnings only (unless `--warnings-ok`).
|
|
310
|
-
|
|
311
|
-
## Session Log
|
|
312
|
-
|
|
313
|
-
View and search historical session data.
|
|
314
|
-
|
|
315
|
-
```bash
|
|
316
|
-
kspec session log list # List sessions with stats
|
|
317
|
-
kspec session log list --since 7d # Recent sessions
|
|
318
|
-
kspec session log list --agent ralph # Filter by agent type
|
|
319
|
-
kspec session log show <session-id> # Detailed session view
|
|
320
|
-
kspec session log show <id> --events # Include events
|
|
321
|
-
kspec session log stats # Aggregate analytics
|
|
322
|
-
kspec session log stats --by-day # Daily breakdown
|
|
323
|
-
kspec session log stats --tool-usage # Tool usage stats
|
|
324
|
-
kspec session log search "pattern" # Search across events
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
## Search and Export
|
|
328
|
-
|
|
329
|
-
```bash
|
|
330
|
-
# Search across items, tasks, inbox, and meta
|
|
331
|
-
kspec search "pattern"
|
|
332
|
-
kspec search "auth" --tasks-only
|
|
333
|
-
kspec search "feature" --items-only --limit 10
|
|
334
|
-
|
|
335
|
-
# Git history by spec/task
|
|
336
|
-
kspec log @task-ref # Commits related to a ref
|
|
337
|
-
kspec log --spec @spec-ref # Search by spec trailer
|
|
338
|
-
kspec log --since "2 weeks ago" # Filter by date
|
|
339
|
-
|
|
340
|
-
# Export
|
|
341
|
-
kspec export # JSON export
|
|
342
|
-
kspec export --format html -o out.html
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
## Batch Execution
|
|
346
|
-
|
|
347
|
-
Execute multiple commands atomically or with per-command commits.
|
|
348
|
-
|
|
349
|
-
```bash
|
|
350
|
-
# Atomic (default) — single commit, rollback on failure
|
|
351
|
-
echo '[{"command":"task note","args":{"ref":"@task","message":"update"}}]' | kspec batch
|
|
352
|
-
kspec batch --file commands.json
|
|
353
|
-
|
|
354
|
-
# Immediate mode — per-command commits
|
|
355
|
-
kspec batch --no-atomic --file commands.json
|
|
356
|
-
|
|
357
|
-
# Continue on error, dry run
|
|
358
|
-
kspec batch --continue --file commands.json
|
|
359
|
-
kspec batch --dry-run --file commands.json
|
|
360
|
-
|
|
361
|
-
# Discover available batch commands
|
|
362
|
-
kspec batch commands
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
Each command: `{"command": "cli path", "args": {...}, "id": "optional"}`. Only mutating commands allowed. Typos in command names produce did-you-mean suggestions.
|
|
366
|
-
|
|
367
|
-
## Shadow Branch
|
|
368
|
-
|
|
369
|
-
kspec stores spec/task state on a separate orphan branch (`kspec-meta`) via a git worktree at `.kspec/`. This keeps spec changes out of your main branch history.
|
|
370
|
-
|
|
371
|
-
```bash
|
|
372
|
-
kspec init # Initialize project (creates shadow branch)
|
|
373
|
-
kspec shadow status # Check shadow branch health
|
|
374
|
-
kspec shadow sync # Sync with remote
|
|
375
|
-
kspec shadow repair # Fix broken worktree
|
|
376
|
-
kspec shadow log # Recent shadow commits
|
|
33
|
+
kspec init
|
|
34
|
+
kspec setup
|
|
35
|
+
kspec session start
|
|
377
36
|
```
|
|
378
37
|
|
|
379
|
-
|
|
38
|
+
That three-command sequence is the common starting point across real kspec projects:
|
|
380
39
|
|
|
381
|
-
|
|
382
|
-
kspec
|
|
383
|
-
kspec
|
|
384
|
-
kspec help # Extended help
|
|
385
|
-
kspec help --all # Full command reference
|
|
386
|
-
kspec help --exit-codes # Exit code documentation
|
|
387
|
-
kspec help <cmd> --json-schema # JSON Schema for a command
|
|
388
|
-
```
|
|
40
|
+
1. `kspec init` creates the project manifest plus the `.kspec/` shadow worktree.
|
|
41
|
+
2. `kspec setup` configures agent authoring and local runtime integration.
|
|
42
|
+
3. `kspec session start` shows active work, ready tasks, and pending project context.
|
|
389
43
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
Tasks are stored in YAML files (`*.tasks.yaml`):
|
|
393
|
-
|
|
394
|
-
```yaml
|
|
395
|
-
- _ulid: 01KEYQSD2QJCNGRKSR38V0E3BM
|
|
396
|
-
slugs: [my-task]
|
|
397
|
-
title: My task title
|
|
398
|
-
type: task # task, epic, bug, spike, infra
|
|
399
|
-
status: pending # pending, in_progress, pending_review, completed, blocked, cancelled
|
|
400
|
-
priority: 2 # 1 (highest) to 5 (lowest)
|
|
401
|
-
spec_ref: "@feature-slug"
|
|
402
|
-
depends_on: ["@other-task"]
|
|
403
|
-
tags: [mvp]
|
|
404
|
-
notes:
|
|
405
|
-
- _ulid: 01KEYRJ953HRYWJ0W4XEG6J9FB
|
|
406
|
-
created_at: "2026-01-14T17:00:00Z"
|
|
407
|
-
author: "@claude"
|
|
408
|
-
content: |
|
|
409
|
-
Started implementing feature X...
|
|
410
|
-
```
|
|
44
|
+
For install details, cloning existing kspec projects, and troubleshooting, see [INSTALL.md](INSTALL.md).
|
|
411
45
|
|
|
412
|
-
##
|
|
46
|
+
## The spec-first loop
|
|
413
47
|
|
|
414
|
-
|
|
48
|
+
The core workflow is short:
|
|
415
49
|
|
|
416
50
|
```bash
|
|
417
|
-
|
|
418
|
-
kspec --
|
|
419
|
-
|
|
51
|
+
# 1. Define what should exist
|
|
52
|
+
kspec item add --under @main --title "Contributing guide" --type feature --slug contributing-guide
|
|
53
|
+
kspec item ac add @contributing-guide \
|
|
54
|
+
--given "a new contributor opens the repository" \
|
|
55
|
+
--when "they look for project workflow guidance" \
|
|
56
|
+
--then "they can follow a documented path to set up, make changes, and submit work"
|
|
420
57
|
|
|
421
|
-
|
|
58
|
+
# 2. Derive implementation work from the spec
|
|
59
|
+
kspec derive @contributing-guide
|
|
422
60
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
│ ├── kynetic.yaml # Root manifest
|
|
427
|
-
│ ├── project.tasks.yaml # Active tasks
|
|
428
|
-
│ ├── project.inbox.yaml # Inbox items
|
|
429
|
-
│ └── modules/ # Spec items by domain
|
|
430
|
-
├── src/ # TypeScript implementation
|
|
431
|
-
│ ├── schema/ # Zod schemas
|
|
432
|
-
│ ├── parser/ # YAML loading
|
|
433
|
-
│ └── cli/ # Command handlers
|
|
434
|
-
└── tests/ # Vitest tests
|
|
435
|
-
```
|
|
436
|
-
|
|
437
|
-
## Development
|
|
61
|
+
# 3. Start and track execution
|
|
62
|
+
kspec task start @task-contributing-guide
|
|
63
|
+
kspec task note @task-contributing-guide "Drafting CONTRIBUTING.md and linking it from README."
|
|
438
64
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
npm test
|
|
442
|
-
npm run test:watch
|
|
65
|
+
# 4. Submit after code/docs + PR are ready
|
|
66
|
+
kspec task submit @task-contributing-guide
|
|
443
67
|
|
|
444
|
-
#
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
# Run CLI in dev mode
|
|
448
|
-
npm run dev -- tasks ready
|
|
68
|
+
# 5. Complete after merge
|
|
69
|
+
kspec task complete @task-contributing-guide --reason "Merged in PR #123."
|
|
449
70
|
```
|
|
450
71
|
|
|
451
|
-
|
|
72
|
+
For the full walkthrough from install to first completed task, see [docs/getting-started.md](docs/getting-started.md).
|
|
452
73
|
|
|
453
|
-
|
|
74
|
+
## How it works
|
|
454
75
|
|
|
455
|
-
|
|
456
|
-
- Commands execute twice
|
|
457
|
-
- CLI seems to hang or behave unexpectedly
|
|
458
|
-
- "Cannot find module" errors when using `npm link`
|
|
76
|
+
### Specs stay separate from product code
|
|
459
77
|
|
|
460
|
-
|
|
461
|
-
- `npm link` creates symlinks for global CLI binaries
|
|
462
|
-
- Node.js ESM uses `import.meta.url` to detect if a module is the main entry point
|
|
463
|
-
- Without symlink resolution, `import.meta.url` doesn't match the symlinked path
|
|
464
|
-
- This causes the module to be imported but not executed, or executed multiple times
|
|
78
|
+
By default, `kspec` stores specs, tasks, plans, and workflow state inside `.kspec/`, which is a git worktree backed by an orphan `kspec-meta` branch. Your source branch stays focused on code. Your planning state remains versioned and auditable.
|
|
465
79
|
|
|
466
|
-
|
|
467
|
-
kspec uses `fs.realpathSync()` to resolve symlinks before comparing paths:
|
|
80
|
+
### Tasks stay linked to intent
|
|
468
81
|
|
|
469
|
-
|
|
470
|
-
// src/cli/index.ts
|
|
471
|
-
const scriptPath = realpathSync(process.argv[1]);
|
|
472
|
-
if (import.meta.url === `file://${scriptPath}`) {
|
|
473
|
-
program.parse();
|
|
474
|
-
}
|
|
475
|
-
```
|
|
82
|
+
When you run `kspec derive @spec-ref`, the resulting task keeps a `spec_ref` back to the originating item. Reviews can validate the implementation against acceptance criteria instead of relying on a loosely-related ticket title.
|
|
476
83
|
|
|
477
|
-
|
|
478
|
-
- `npm run dev` (direct TypeScript execution)
|
|
479
|
-
- `npm link` (symlinked global binary)
|
|
480
|
-
- `node dist/cli/index.js` (built code)
|
|
84
|
+
### Agents get the same context humans do
|
|
481
85
|
|
|
482
|
-
|
|
483
|
-
1. Import `realpathSync` from `fs`
|
|
484
|
-
2. Resolve `process.argv[1]` before comparing with `import.meta.url`
|
|
485
|
-
3. This makes the CLI work correctly in all installation modes
|
|
86
|
+
`kspec setup` and `kspec agents generate` produce project-scoped instructions and skills so agents can follow the same conventions, workflows, and task lifecycle you use manually.
|
|
486
87
|
|
|
487
|
-
##
|
|
88
|
+
## Where to go next
|
|
488
89
|
|
|
489
|
-
-
|
|
490
|
-
-
|
|
491
|
-
-
|
|
492
|
-
-
|
|
493
|
-
- **Slug aliases**: Human-friendly names that map to ULIDs
|
|
90
|
+
- [docs/getting-started.md](docs/getting-started.md): first-project tutorial for humans and agents
|
|
91
|
+
- [INSTALL.md](INSTALL.md): installation, setup modes, and troubleshooting
|
|
92
|
+
- [AGENTS.md](AGENTS.md): project instructions for agent contributors
|
|
93
|
+
- [docs/history/KYNETIC_SPEC_DESIGN.md](docs/history/KYNETIC_SPEC_DESIGN.md): design rationale and architecture history
|
|
494
94
|
|
|
495
|
-
##
|
|
95
|
+
## Developing kspec itself
|
|
496
96
|
|
|
497
|
-
|
|
97
|
+
This repository is the source for the `@kynetic-ai/spec` npm package. If you want to work on `kspec` rather than adopt it in another repo, use the contributor/development setup in [INSTALL.md](INSTALL.md#from-source) and the project workflow in [AGENTS.md](AGENTS.md).
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Agent } from "../schema/meta.js";
|
|
2
|
+
import type { DispatchWorkspaceMetadata, DispatchWorkspaceRole } from "./workspace.js";
|
|
3
|
+
export interface DispatchBootstrapStep {
|
|
4
|
+
source: "dispatch" | "agent";
|
|
5
|
+
name: string;
|
|
6
|
+
run: string;
|
|
7
|
+
roles?: Array<DispatchWorkspaceRole>;
|
|
8
|
+
idempotent: boolean;
|
|
9
|
+
allowTrackedChanges: boolean;
|
|
10
|
+
reviewerRerunAllowed: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface EnsureWorkspaceBootstrapOptions {
|
|
13
|
+
projectDir: string;
|
|
14
|
+
workspaceDir: string;
|
|
15
|
+
metadataPath: string;
|
|
16
|
+
metadata: DispatchWorkspaceMetadata;
|
|
17
|
+
role: DispatchWorkspaceRole;
|
|
18
|
+
agent: Agent;
|
|
19
|
+
env: Record<string, string>;
|
|
20
|
+
}
|
|
21
|
+
export interface EnsureWorkspaceBootstrapResult {
|
|
22
|
+
metadata: DispatchWorkspaceMetadata;
|
|
23
|
+
reused: boolean;
|
|
24
|
+
ranSteps: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare class DispatchBootstrapError extends Error {
|
|
27
|
+
suggestion: string;
|
|
28
|
+
constructor(message: string, suggestion: string);
|
|
29
|
+
}
|
|
30
|
+
export declare function ensureWorkspaceBootstrap(options: EnsureWorkspaceBootstrapOptions): Promise<EnsureWorkspaceBootstrapResult>;
|
|
31
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/bootstrap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAEV,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,yBAAyB,CAAC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,UAAU,EAAE,MAAM,CAAC;gBAEP,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKhD;AAoJD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,8BAA8B,CAAC,CAwOzC"}
|