@schnick371/devsteps-shared 1.1.0-next.4 → 2.0.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +115 -0
- package/README.md +12 -30
- package/dist/constants/index.d.ts +40 -56
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +7 -23
- package/dist/constants/index.js.map +1 -1
- package/dist/core/add-batch-input.d.ts +28 -0
- package/dist/core/add-batch-input.d.ts.map +1 -0
- package/dist/core/add-batch-input.js +106 -0
- package/dist/core/add-batch-input.js.map +1 -0
- package/dist/core/add-batch.d.ts +37 -0
- package/dist/core/add-batch.d.ts.map +1 -0
- package/dist/core/add-batch.js +219 -0
- package/dist/core/add-batch.js.map +1 -0
- package/dist/core/add-preparation.d.ts +40 -0
- package/dist/core/add-preparation.d.ts.map +1 -0
- package/dist/core/add-preparation.js +208 -0
- package/dist/core/add-preparation.js.map +1 -0
- package/dist/core/add.d.ts +29 -6
- package/dist/core/add.d.ts.map +1 -1
- package/dist/core/add.js +54 -64
- package/dist/core/add.js.map +1 -1
- package/dist/core/archive.d.ts +18 -3
- package/dist/core/archive.d.ts.map +1 -1
- package/dist/core/archive.js +80 -35
- package/dist/core/archive.js.map +1 -1
- package/dist/core/auto-migrate-detect.d.ts +51 -16
- package/dist/core/auto-migrate-detect.d.ts.map +1 -1
- package/dist/core/auto-migrate-detect.js +128 -29
- package/dist/core/auto-migrate-detect.js.map +1 -1
- package/dist/core/auto-migrate-folders.d.ts +35 -0
- package/dist/core/auto-migrate-folders.d.ts.map +1 -0
- package/dist/core/auto-migrate-folders.js +104 -0
- package/dist/core/auto-migrate-folders.js.map +1 -0
- package/dist/core/auto-migrate-impl.d.ts +12 -10
- package/dist/core/auto-migrate-impl.d.ts.map +1 -1
- package/dist/core/auto-migrate-impl.js +79 -64
- package/dist/core/auto-migrate-impl.js.map +1 -1
- package/dist/core/auto-migrate.d.ts +16 -20
- package/dist/core/auto-migrate.d.ts.map +1 -1
- package/dist/core/auto-migrate.js +65 -56
- package/dist/core/auto-migrate.js.map +1 -1
- package/dist/core/board.d.ts +34 -0
- package/dist/core/board.d.ts.map +1 -0
- package/dist/core/board.js +64 -0
- package/dist/core/board.js.map +1 -0
- package/dist/core/bulk-update.d.ts +2 -0
- package/dist/core/bulk-update.d.ts.map +1 -1
- package/dist/core/bulk-update.js +45 -76
- package/dist/core/bulk-update.js.map +1 -1
- package/dist/core/child-relations.d.ts +26 -0
- package/dist/core/child-relations.d.ts.map +1 -0
- package/dist/core/child-relations.js +50 -0
- package/dist/core/child-relations.js.map +1 -0
- package/dist/core/classification-defaults.d.ts +20 -0
- package/dist/core/classification-defaults.d.ts.map +1 -0
- package/dist/core/classification-defaults.js +253 -0
- package/dist/core/classification-defaults.js.map +1 -0
- package/dist/core/classification-exports.d.ts +16 -0
- package/dist/core/classification-exports.d.ts.map +1 -0
- package/dist/core/classification-exports.js +16 -0
- package/dist/core/classification-exports.js.map +1 -0
- package/dist/core/classification-gate.d.ts +86 -0
- package/dist/core/classification-gate.d.ts.map +1 -0
- package/dist/core/classification-gate.js +250 -0
- package/dist/core/classification-gate.js.map +1 -0
- package/dist/core/classification-leaf.d.ts +50 -0
- package/dist/core/classification-leaf.d.ts.map +1 -0
- package/dist/core/classification-leaf.js +134 -0
- package/dist/core/classification-leaf.js.map +1 -0
- package/dist/core/classification-registry-action.d.ts +34 -0
- package/dist/core/classification-registry-action.d.ts.map +1 -0
- package/dist/core/classification-registry-action.js +71 -0
- package/dist/core/classification-registry-action.js.map +1 -0
- package/dist/core/classification-registry-ops.d.ts +30 -0
- package/dist/core/classification-registry-ops.d.ts.map +1 -0
- package/dist/core/classification-registry-ops.js +122 -0
- package/dist/core/classification-registry-ops.js.map +1 -0
- package/dist/core/classification-registry.d.ts +132 -0
- package/dist/core/classification-registry.d.ts.map +1 -0
- package/dist/core/classification-registry.js +141 -0
- package/dist/core/classification-registry.js.map +1 -0
- package/dist/core/classification-resolve.d.ts +31 -0
- package/dist/core/classification-resolve.d.ts.map +1 -0
- package/dist/core/classification-resolve.js +69 -0
- package/dist/core/classification-resolve.js.map +1 -0
- package/dist/core/classification-score.d.ts +50 -0
- package/dist/core/classification-score.d.ts.map +1 -0
- package/dist/core/classification-score.js +107 -0
- package/dist/core/classification-score.js.map +1 -0
- package/dist/core/classification-snapshot.d.ts +55 -0
- package/dist/core/classification-snapshot.d.ts.map +1 -0
- package/dist/core/classification-snapshot.js +85 -0
- package/dist/core/classification-snapshot.js.map +1 -0
- package/dist/core/closeout-branch-record.d.ts +56 -0
- package/dist/core/closeout-branch-record.d.ts.map +1 -0
- package/dist/core/closeout-branch-record.js +201 -0
- package/dist/core/closeout-branch-record.js.map +1 -0
- package/dist/core/closeout-classify.d.ts +25 -0
- package/dist/core/closeout-classify.d.ts.map +1 -0
- package/dist/core/closeout-classify.js +271 -0
- package/dist/core/closeout-classify.js.map +1 -0
- package/dist/core/closeout-git.d.ts +52 -0
- package/dist/core/closeout-git.d.ts.map +1 -0
- package/dist/core/closeout-git.js +94 -0
- package/dist/core/closeout-git.js.map +1 -0
- package/dist/core/closeout-handover-draft.d.ts +19 -0
- package/dist/core/closeout-handover-draft.d.ts.map +1 -0
- package/dist/core/closeout-handover-draft.js +144 -0
- package/dist/core/closeout-handover-draft.js.map +1 -0
- package/dist/core/closeout-inventory.d.ts +18 -0
- package/dist/core/closeout-inventory.d.ts.map +1 -0
- package/dist/core/closeout-inventory.js +251 -0
- package/dist/core/closeout-inventory.js.map +1 -0
- package/dist/core/closeout-preserve.d.ts +23 -0
- package/dist/core/closeout-preserve.d.ts.map +1 -0
- package/dist/core/closeout-preserve.js +123 -0
- package/dist/core/closeout-preserve.js.map +1 -0
- package/dist/core/closeout-record-write.d.ts +29 -0
- package/dist/core/closeout-record-write.d.ts.map +1 -0
- package/dist/core/closeout-record-write.js +69 -0
- package/dist/core/closeout-record-write.js.map +1 -0
- package/dist/core/closeout-repository.d.ts +16 -0
- package/dist/core/closeout-repository.d.ts.map +1 -0
- package/dist/core/closeout-repository.js +84 -0
- package/dist/core/closeout-repository.js.map +1 -0
- package/dist/core/closeout-rescue-refs.d.ts +18 -0
- package/dist/core/closeout-rescue-refs.d.ts.map +1 -0
- package/dist/core/closeout-rescue-refs.js +90 -0
- package/dist/core/closeout-rescue-refs.js.map +1 -0
- package/dist/core/closeout-rescue-run.d.ts +29 -0
- package/dist/core/closeout-rescue-run.d.ts.map +1 -0
- package/dist/core/closeout-rescue-run.js +66 -0
- package/dist/core/closeout-rescue-run.js.map +1 -0
- package/dist/core/closeout-rescue.d.ts +66 -0
- package/dist/core/closeout-rescue.d.ts.map +1 -0
- package/dist/core/closeout-rescue.js +302 -0
- package/dist/core/closeout-rescue.js.map +1 -0
- package/dist/core/closeout-rows.d.ts +10 -0
- package/dist/core/closeout-rows.d.ts.map +1 -0
- package/dist/core/closeout-rows.js +103 -0
- package/dist/core/closeout-rows.js.map +1 -0
- package/dist/core/closeout-secrets.d.ts +20 -0
- package/dist/core/closeout-secrets.d.ts.map +1 -0
- package/dist/core/closeout-secrets.js +119 -0
- package/dist/core/closeout-secrets.js.map +1 -0
- package/dist/core/closeout-types.d.ts +140 -0
- package/dist/core/closeout-types.d.ts.map +1 -0
- package/dist/core/closeout-types.js +9 -0
- package/dist/core/closeout-types.js.map +1 -0
- package/dist/core/closeout-worktree-links.d.ts +27 -0
- package/dist/core/closeout-worktree-links.d.ts.map +1 -0
- package/dist/core/closeout-worktree-links.js +112 -0
- package/dist/core/closeout-worktree-links.js.map +1 -0
- package/dist/core/closeout-worktrees.d.ts +54 -0
- package/dist/core/closeout-worktrees.d.ts.map +1 -0
- package/dist/core/closeout-worktrees.js +250 -0
- package/dist/core/closeout-worktrees.js.map +1 -0
- package/dist/core/commit-hint.d.ts +30 -0
- package/dist/core/commit-hint.d.ts.map +1 -0
- package/dist/core/commit-hint.js +34 -0
- package/dist/core/commit-hint.js.map +1 -0
- package/dist/core/compass-chain.d.ts +32 -0
- package/dist/core/compass-chain.d.ts.map +1 -0
- package/dist/core/compass-chain.js +90 -0
- package/dist/core/compass-chain.js.map +1 -0
- package/dist/core/compass-render.d.ts +16 -0
- package/dist/core/compass-render.d.ts.map +1 -0
- package/dist/core/compass-render.js +87 -0
- package/dist/core/compass-render.js.map +1 -0
- package/dist/core/compass-types.d.ts +93 -0
- package/dist/core/compass-types.d.ts.map +1 -0
- package/dist/core/compass-types.js +12 -0
- package/dist/core/compass-types.js.map +1 -0
- package/dist/core/compass.d.ts +31 -0
- package/dist/core/compass.d.ts.map +1 -0
- package/dist/core/compass.js +207 -0
- package/dist/core/compass.js.map +1 -0
- package/dist/core/config.d.ts +11 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +33 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/context-items.d.ts +61 -0
- package/dist/core/context-items.d.ts.map +1 -0
- package/dist/core/context-items.js +111 -0
- package/dist/core/context-items.js.map +1 -0
- package/dist/core/context-render.d.ts +23 -0
- package/dist/core/context-render.d.ts.map +1 -0
- package/dist/core/context-render.js +228 -0
- package/dist/core/context-render.js.map +1 -0
- package/dist/core/context.d.ts +5 -35
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +11 -316
- package/dist/core/context.js.map +1 -1
- package/dist/core/coord-handover-notice.d.ts +32 -0
- package/dist/core/coord-handover-notice.d.ts.map +1 -0
- package/dist/core/coord-handover-notice.js +66 -0
- package/dist/core/coord-handover-notice.js.map +1 -0
- package/dist/core/coord-input.d.ts +106 -0
- package/dist/core/coord-input.d.ts.map +1 -0
- package/dist/core/coord-input.js +142 -0
- package/dist/core/coord-input.js.map +1 -0
- package/dist/core/coord-journal.d.ts +28 -0
- package/dist/core/coord-journal.d.ts.map +1 -0
- package/dist/core/coord-journal.js +51 -0
- package/dist/core/coord-journal.js.map +1 -0
- package/dist/core/coord-paths.d.ts +30 -0
- package/dist/core/coord-paths.d.ts.map +1 -0
- package/dist/core/coord-paths.js +65 -0
- package/dist/core/coord-paths.js.map +1 -0
- package/dist/core/coord-read.d.ts +135 -0
- package/dist/core/coord-read.d.ts.map +1 -0
- package/dist/core/coord-read.js +154 -0
- package/dist/core/coord-read.js.map +1 -0
- package/dist/core/coord-store.d.ts +51 -0
- package/dist/core/coord-store.d.ts.map +1 -0
- package/dist/core/coord-store.js +188 -0
- package/dist/core/coord-store.js.map +1 -0
- package/dist/core/coord-summary.d.ts +23 -0
- package/dist/core/coord-summary.d.ts.map +1 -0
- package/dist/core/coord-summary.js +70 -0
- package/dist/core/coord-summary.js.map +1 -0
- package/dist/core/coord-sweep.d.ts +20 -0
- package/dist/core/coord-sweep.d.ts.map +1 -0
- package/dist/core/coord-sweep.js +60 -0
- package/dist/core/coord-sweep.js.map +1 -0
- package/dist/core/coord-target.d.ts +13 -0
- package/dist/core/coord-target.d.ts.map +1 -0
- package/dist/core/coord-target.js +20 -0
- package/dist/core/coord-target.js.map +1 -0
- package/dist/core/coord-write.d.ts +43 -0
- package/dist/core/coord-write.d.ts.map +1 -0
- package/dist/core/coord-write.js +210 -0
- package/dist/core/coord-write.js.map +1 -0
- package/dist/core/coordination-text.d.ts +49 -0
- package/dist/core/coordination-text.d.ts.map +1 -0
- package/dist/core/coordination-text.js +159 -0
- package/dist/core/coordination-text.js.map +1 -0
- package/dist/core/counter-lock-owner.d.ts +33 -0
- package/dist/core/counter-lock-owner.d.ts.map +1 -0
- package/dist/core/counter-lock-owner.js +129 -0
- package/dist/core/counter-lock-owner.js.map +1 -0
- package/dist/core/counter-lock-types.d.ts +39 -0
- package/dist/core/counter-lock-types.d.ts.map +1 -0
- package/dist/core/counter-lock-types.js +21 -0
- package/dist/core/counter-lock-types.js.map +1 -0
- package/dist/core/counter-lock.d.ts +33 -0
- package/dist/core/counter-lock.d.ts.map +1 -0
- package/dist/core/counter-lock.js +295 -0
- package/dist/core/counter-lock.js.map +1 -0
- package/dist/core/counters.d.ts +58 -0
- package/dist/core/counters.d.ts.map +1 -0
- package/dist/core/counters.js +244 -0
- package/dist/core/counters.js.map +1 -0
- package/dist/core/dashboard-insights.d.ts +101 -0
- package/dist/core/dashboard-insights.d.ts.map +1 -0
- package/dist/core/dashboard-insights.js +175 -0
- package/dist/core/dashboard-insights.js.map +1 -0
- package/dist/core/dashboard-model.d.ts +106 -0
- package/dist/core/dashboard-model.d.ts.map +1 -0
- package/dist/core/dashboard-model.js +176 -0
- package/dist/core/dashboard-model.js.map +1 -0
- package/dist/core/decision-count.d.ts +18 -0
- package/dist/core/decision-count.d.ts.map +1 -0
- package/dist/core/decision-count.js +74 -0
- package/dist/core/decision-count.js.map +1 -0
- package/dist/core/decision-question-status.d.ts +36 -0
- package/dist/core/decision-question-status.d.ts.map +1 -0
- package/dist/core/decision-question-status.js +106 -0
- package/dist/core/decision-question-status.js.map +1 -0
- package/dist/core/decision-question.d.ts +73 -0
- package/dist/core/decision-question.d.ts.map +1 -0
- package/dist/core/decision-question.js +203 -0
- package/dist/core/decision-question.js.map +1 -0
- package/dist/core/decision-round-actions.d.ts +49 -0
- package/dist/core/decision-round-actions.d.ts.map +1 -0
- package/dist/core/decision-round-actions.js +114 -0
- package/dist/core/decision-round-actions.js.map +1 -0
- package/dist/core/decision-round-owner.d.ts +29 -0
- package/dist/core/decision-round-owner.d.ts.map +1 -0
- package/dist/core/decision-round-owner.js +130 -0
- package/dist/core/decision-round-owner.js.map +1 -0
- package/dist/core/decision-round-text.d.ts +43 -0
- package/dist/core/decision-round-text.d.ts.map +1 -0
- package/dist/core/decision-round-text.js +146 -0
- package/dist/core/decision-round-text.js.map +1 -0
- package/dist/core/decision-round-types.d.ts +108 -0
- package/dist/core/decision-round-types.d.ts.map +1 -0
- package/dist/core/decision-round-types.js +11 -0
- package/dist/core/decision-round-types.js.map +1 -0
- package/dist/core/decision-round.d.ts +19 -0
- package/dist/core/decision-round.d.ts.map +1 -0
- package/dist/core/decision-round.js +166 -0
- package/dist/core/decision-round.js.map +1 -0
- package/dist/core/description-patch.d.ts +39 -0
- package/dist/core/description-patch.d.ts.map +1 -0
- package/dist/core/description-patch.js +107 -0
- package/dist/core/description-patch.js.map +1 -0
- package/dist/core/docs-assemble.d.ts +91 -0
- package/dist/core/docs-assemble.d.ts.map +1 -0
- package/dist/core/docs-assemble.js +210 -0
- package/dist/core/docs-assemble.js.map +1 -0
- package/dist/core/docs-map.d.ts +74 -0
- package/dist/core/docs-map.d.ts.map +1 -0
- package/dist/core/docs-map.js +247 -0
- package/dist/core/docs-map.js.map +1 -0
- package/dist/core/doctor-attachments.d.ts +29 -0
- package/dist/core/doctor-attachments.d.ts.map +1 -0
- package/dist/core/doctor-attachments.js +95 -0
- package/dist/core/doctor-attachments.js.map +1 -0
- package/dist/core/doctor-classification.d.ts +14 -0
- package/dist/core/doctor-classification.d.ts.map +1 -0
- package/dist/core/doctor-classification.js +55 -0
- package/dist/core/doctor-classification.js.map +1 -0
- package/dist/core/doctor-commit-evidence-git.d.ts +19 -0
- package/dist/core/doctor-commit-evidence-git.d.ts.map +1 -0
- package/dist/core/doctor-commit-evidence-git.js +278 -0
- package/dist/core/doctor-commit-evidence-git.js.map +1 -0
- package/dist/core/doctor-commit-evidence.d.ts +11 -0
- package/dist/core/doctor-commit-evidence.d.ts.map +1 -0
- package/dist/core/doctor-commit-evidence.js +139 -0
- package/dist/core/doctor-commit-evidence.js.map +1 -0
- package/dist/core/doctor-coordination.d.ts +20 -0
- package/dist/core/doctor-coordination.d.ts.map +1 -0
- package/dist/core/doctor-coordination.js +88 -0
- package/dist/core/doctor-coordination.js.map +1 -0
- package/dist/core/doctor-counters.d.ts +13 -0
- package/dist/core/doctor-counters.d.ts.map +1 -0
- package/dist/core/doctor-counters.js +46 -0
- package/dist/core/doctor-counters.js.map +1 -0
- package/dist/core/doctor-generated-files.d.ts +32 -0
- package/dist/core/doctor-generated-files.d.ts.map +1 -0
- package/dist/core/doctor-generated-files.js +178 -0
- package/dist/core/doctor-generated-files.js.map +1 -0
- package/dist/core/doctor-placeholders.d.ts +10 -0
- package/dist/core/doctor-placeholders.d.ts.map +1 -0
- package/dist/core/doctor-placeholders.js +49 -0
- package/dist/core/doctor-placeholders.js.map +1 -0
- package/dist/core/doctor-relations.d.ts +27 -0
- package/dist/core/doctor-relations.d.ts.map +1 -0
- package/dist/core/doctor-relations.js +179 -0
- package/dist/core/doctor-relations.js.map +1 -0
- package/dist/core/doctor-schema-normalize.d.ts +16 -0
- package/dist/core/doctor-schema-normalize.d.ts.map +1 -0
- package/dist/core/doctor-schema-normalize.js +63 -0
- package/dist/core/doctor-schema-normalize.js.map +1 -0
- package/dist/core/doctor-schema-repair-types.d.ts +37 -0
- package/dist/core/doctor-schema-repair-types.d.ts.map +1 -0
- package/dist/core/doctor-schema-repair-types.js +8 -0
- package/dist/core/doctor-schema-repair-types.js.map +1 -0
- package/dist/core/doctor-schema-repair.d.ts +17 -0
- package/dist/core/doctor-schema-repair.d.ts.map +1 -0
- package/dist/core/doctor-schema-repair.js +113 -0
- package/dist/core/doctor-schema-repair.js.map +1 -0
- package/dist/core/doctor-schema-set.d.ts +11 -0
- package/dist/core/doctor-schema-set.d.ts.map +1 -0
- package/dist/core/doctor-schema-set.js +57 -0
- package/dist/core/doctor-schema-set.js.map +1 -0
- package/dist/core/doctor-schema-tokens.d.ts +21 -0
- package/dist/core/doctor-schema-tokens.d.ts.map +1 -0
- package/dist/core/doctor-schema-tokens.js +88 -0
- package/dist/core/doctor-schema-tokens.js.map +1 -0
- package/dist/core/doctor-schema.d.ts +16 -0
- package/dist/core/doctor-schema.d.ts.map +1 -0
- package/dist/core/doctor-schema.js +59 -0
- package/dist/core/doctor-schema.js.map +1 -0
- package/dist/core/doctor-types.d.ts +23 -0
- package/dist/core/doctor-types.d.ts.map +1 -0
- package/dist/core/doctor-types.js +14 -0
- package/dist/core/doctor-types.js.map +1 -0
- package/dist/core/doctor.d.ts +17 -0
- package/dist/core/doctor.d.ts.map +1 -0
- package/dist/core/doctor.js +132 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/epic-sections.d.ts +39 -0
- package/dist/core/epic-sections.d.ts.map +1 -0
- package/dist/core/epic-sections.js +147 -0
- package/dist/core/epic-sections.js.map +1 -0
- package/dist/core/expedition-metadata.d.ts +42 -0
- package/dist/core/expedition-metadata.d.ts.map +1 -0
- package/dist/core/expedition-metadata.js +54 -0
- package/dist/core/expedition-metadata.js.map +1 -0
- package/dist/core/expedition-paths.d.ts +31 -0
- package/dist/core/expedition-paths.d.ts.map +1 -0
- package/dist/core/expedition-paths.js +52 -0
- package/dist/core/expedition-paths.js.map +1 -0
- package/dist/core/export-render.d.ts +29 -0
- package/dist/core/export-render.d.ts.map +1 -0
- package/dist/core/export-render.js +105 -0
- package/dist/core/export-render.js.map +1 -0
- package/dist/core/export.d.ts +24 -0
- package/dist/core/export.d.ts.map +1 -0
- package/dist/core/export.js +61 -0
- package/dist/core/export.js.map +1 -0
- package/dist/core/focus-work.d.ts +13 -0
- package/dist/core/focus-work.d.ts.map +1 -0
- package/dist/core/focus-work.js +13 -0
- package/dist/core/focus-work.js.map +1 -0
- package/dist/core/focus.d.ts +35 -0
- package/dist/core/focus.d.ts.map +1 -0
- package/dist/core/focus.js +60 -0
- package/dist/core/focus.js.map +1 -0
- package/dist/core/frontmatter.d.ts +58 -0
- package/dist/core/frontmatter.d.ts.map +1 -0
- package/dist/core/frontmatter.js +178 -0
- package/dist/core/frontmatter.js.map +1 -0
- package/dist/core/get-fields.d.ts +27 -0
- package/dist/core/get-fields.d.ts.map +1 -0
- package/dist/core/get-fields.js +60 -0
- package/dist/core/get-fields.js.map +1 -0
- package/dist/core/get.d.ts +36 -2
- package/dist/core/get.d.ts.map +1 -1
- package/dist/core/get.js +54 -12
- package/dist/core/get.js.map +1 -1
- package/dist/core/guide-acceptance.d.ts +21 -0
- package/dist/core/guide-acceptance.d.ts.map +1 -0
- package/dist/core/guide-acceptance.js +311 -0
- package/dist/core/guide-acceptance.js.map +1 -0
- package/dist/core/guide-step-list.d.ts +25 -0
- package/dist/core/guide-step-list.d.ts.map +1 -0
- package/dist/core/guide-step-list.js +91 -0
- package/dist/core/guide-step-list.js.map +1 -0
- package/dist/core/heuristic-classify.d.ts +44 -0
- package/dist/core/heuristic-classify.d.ts.map +1 -0
- package/dist/core/heuristic-classify.js +147 -0
- package/dist/core/heuristic-classify.js.map +1 -0
- package/dist/core/host-config.d.ts +80 -0
- package/dist/core/host-config.d.ts.map +1 -0
- package/dist/core/host-config.js +121 -0
- package/dist/core/host-config.js.map +1 -0
- package/dist/core/host-setup.d.ts +146 -0
- package/dist/core/host-setup.d.ts.map +1 -0
- package/dist/core/host-setup.js +277 -0
- package/dist/core/host-setup.js.map +1 -0
- package/dist/core/import-excerpt.d.ts +9 -0
- package/dist/core/import-excerpt.d.ts.map +1 -0
- package/dist/core/import-excerpt.js +17 -0
- package/dist/core/import-excerpt.js.map +1 -0
- package/dist/core/import-materialize.d.ts +66 -0
- package/dist/core/import-materialize.d.ts.map +1 -0
- package/dist/core/import-materialize.js +217 -0
- package/dist/core/import-materialize.js.map +1 -0
- package/dist/core/import-session.d.ts +85 -0
- package/dist/core/import-session.d.ts.map +1 -0
- package/dist/core/import-session.js +192 -0
- package/dist/core/import-session.js.map +1 -0
- package/dist/core/import-source.d.ts +15 -0
- package/dist/core/import-source.d.ts.map +1 -0
- package/dist/core/import-source.js +57 -0
- package/dist/core/import-source.js.map +1 -0
- package/dist/core/index-rebuild.js.map +1 -1
- package/dist/core/index-refs-core.d.ts +23 -0
- package/dist/core/index-refs-core.d.ts.map +1 -1
- package/dist/core/index-refs-core.js +54 -7
- package/dist/core/index-refs-core.js.map +1 -1
- package/dist/core/index-refs.d.ts +13 -0
- package/dist/core/index-refs.d.ts.map +1 -1
- package/dist/core/index-refs.js +42 -1
- package/dist/core/index-refs.js.map +1 -1
- package/dist/core/index.d.ts +90 -8
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +90 -10
- package/dist/core/index.js.map +1 -1
- package/dist/core/init-project.d.ts +69 -0
- package/dist/core/init-project.d.ts.map +1 -0
- package/dist/core/init-project.js +177 -0
- package/dist/core/init-project.js.map +1 -0
- package/dist/core/item-attachments-error.d.ts +22 -0
- package/dist/core/item-attachments-error.d.ts.map +1 -0
- package/dist/core/item-attachments-error.js +23 -0
- package/dist/core/item-attachments-error.js.map +1 -0
- package/dist/core/item-attachments-io.d.ts +37 -0
- package/dist/core/item-attachments-io.d.ts.map +1 -0
- package/dist/core/item-attachments-io.js +156 -0
- package/dist/core/item-attachments-io.js.map +1 -0
- package/dist/core/item-attachments-storage.d.ts +15 -0
- package/dist/core/item-attachments-storage.d.ts.map +1 -0
- package/dist/core/item-attachments-storage.js +81 -0
- package/dist/core/item-attachments-storage.js.map +1 -0
- package/dist/core/item-attachments.d.ts +58 -0
- package/dist/core/item-attachments.d.ts.map +1 -0
- package/dist/core/item-attachments.js +317 -0
- package/dist/core/item-attachments.js.map +1 -0
- package/dist/core/item-paths.d.ts +70 -0
- package/dist/core/item-paths.d.ts.map +1 -0
- package/dist/core/item-paths.js +135 -0
- package/dist/core/item-paths.js.map +1 -0
- package/dist/core/item-raw.d.ts +36 -0
- package/dist/core/item-raw.d.ts.map +1 -0
- package/dist/core/item-raw.js +98 -0
- package/dist/core/item-raw.js.map +1 -0
- package/dist/core/item-store.d.ts +120 -0
- package/dist/core/item-store.d.ts.map +1 -0
- package/dist/core/item-store.js +269 -0
- package/dist/core/item-store.js.map +1 -0
- package/dist/core/item-type-availability.d.ts +9 -0
- package/dist/core/item-type-availability.d.ts.map +1 -0
- package/dist/core/item-type-availability.js +29 -0
- package/dist/core/item-type-availability.js.map +1 -0
- package/dist/core/item-validation.d.ts +35 -0
- package/dist/core/item-validation.d.ts.map +1 -0
- package/dist/core/item-validation.js +99 -0
- package/dist/core/item-validation.js.map +1 -0
- package/dist/core/item-write-pair.d.ts +25 -0
- package/dist/core/item-write-pair.d.ts.map +1 -0
- package/dist/core/item-write-pair.js +71 -0
- package/dist/core/item-write-pair.js.map +1 -0
- package/dist/core/link-conflicts.d.ts +11 -0
- package/dist/core/link-conflicts.d.ts.map +1 -0
- package/dist/core/link-conflicts.js +45 -0
- package/dist/core/link-conflicts.js.map +1 -0
- package/dist/core/link-write.d.ts +15 -0
- package/dist/core/link-write.d.ts.map +1 -0
- package/dist/core/link-write.js +63 -0
- package/dist/core/link-write.js.map +1 -0
- package/dist/core/link.d.ts +10 -0
- package/dist/core/link.d.ts.map +1 -1
- package/dist/core/link.js +52 -65
- package/dist/core/link.js.map +1 -1
- package/dist/core/list-page.d.ts +42 -0
- package/dist/core/list-page.d.ts.map +1 -0
- package/dist/core/list-page.js +70 -0
- package/dist/core/list-page.js.map +1 -0
- package/dist/core/list.d.ts +36 -3
- package/dist/core/list.d.ts.map +1 -1
- package/dist/core/list.js +67 -107
- package/dist/core/list.js.map +1 -1
- package/dist/core/markdown-heading-ranges.d.ts +23 -0
- package/dist/core/markdown-heading-ranges.d.ts.map +1 -0
- package/dist/core/markdown-heading-ranges.js +163 -0
- package/dist/core/markdown-heading-ranges.js.map +1 -0
- package/dist/core/path-guard.d.ts +48 -0
- package/dist/core/path-guard.d.ts.map +1 -0
- package/dist/core/path-guard.js +120 -0
- package/dist/core/path-guard.js.map +1 -0
- package/dist/core/process-definition-hint.d.ts +16 -0
- package/dist/core/process-definition-hint.d.ts.map +1 -0
- package/dist/core/process-definition-hint.js +37 -0
- package/dist/core/process-definition-hint.js.map +1 -0
- package/dist/core/project-status.d.ts +56 -0
- package/dist/core/project-status.d.ts.map +1 -0
- package/dist/core/project-status.js +94 -0
- package/dist/core/project-status.js.map +1 -0
- package/dist/core/promote.d.ts +26 -0
- package/dist/core/promote.d.ts.map +1 -0
- package/dist/core/promote.js +62 -0
- package/dist/core/promote.js.map +1 -0
- package/dist/core/relationship-completeness.d.ts +32 -0
- package/dist/core/relationship-completeness.d.ts.map +1 -0
- package/dist/core/relationship-completeness.js +82 -0
- package/dist/core/relationship-completeness.js.map +1 -0
- package/dist/core/relationship-lock.d.ts +2 -0
- package/dist/core/relationship-lock.d.ts.map +1 -0
- package/dist/core/relationship-lock.js +32 -0
- package/dist/core/relationship-lock.js.map +1 -0
- package/dist/core/relationship-map.d.ts +10 -0
- package/dist/core/relationship-map.d.ts.map +1 -0
- package/dist/core/relationship-map.js +25 -0
- package/dist/core/relationship-map.js.map +1 -0
- package/dist/core/search.d.ts +53 -0
- package/dist/core/search.d.ts.map +1 -0
- package/dist/core/search.js +122 -0
- package/dist/core/search.js.map +1 -0
- package/dist/core/task-workflow-loader.d.ts +37 -0
- package/dist/core/task-workflow-loader.d.ts.map +1 -0
- package/dist/core/task-workflow-loader.js +162 -0
- package/dist/core/task-workflow-loader.js.map +1 -0
- package/dist/core/test-workflow-loader.d.ts +32 -0
- package/dist/core/test-workflow-loader.d.ts.map +1 -0
- package/dist/core/test-workflow-loader.js +98 -0
- package/dist/core/test-workflow-loader.js.map +1 -0
- package/dist/core/trace.d.ts +51 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +193 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/core/traceability-narrative.d.ts +67 -0
- package/dist/core/traceability-narrative.d.ts.map +1 -0
- package/dist/core/traceability-narrative.js +149 -0
- package/dist/core/traceability-narrative.js.map +1 -0
- package/dist/core/unlink.d.ts +4 -0
- package/dist/core/unlink.d.ts.map +1 -1
- package/dist/core/unlink.js +62 -56
- package/dist/core/unlink.js.map +1 -1
- package/dist/core/update-category-receipt.d.ts +19 -0
- package/dist/core/update-category-receipt.d.ts.map +1 -0
- package/dist/core/update-category-receipt.js +25 -0
- package/dist/core/update-category-receipt.js.map +1 -0
- package/dist/core/update-category.d.ts +12 -0
- package/dist/core/update-category.d.ts.map +1 -0
- package/dist/core/update-category.js +59 -0
- package/dist/core/update-category.js.map +1 -0
- package/dist/core/update-reminders.d.ts +30 -0
- package/dist/core/update-reminders.d.ts.map +1 -0
- package/dist/core/update-reminders.js +48 -0
- package/dist/core/update-reminders.js.map +1 -0
- package/dist/core/update.d.ts +46 -2
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +182 -28
- package/dist/core/update.js.map +1 -1
- package/dist/core/validation.d.ts +4 -2
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +61 -29
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workflow-compiler-host-rules.d.ts +32 -0
- package/dist/core/workflow-compiler-host-rules.d.ts.map +1 -0
- package/dist/core/workflow-compiler-host-rules.js +266 -0
- package/dist/core/workflow-compiler-host-rules.js.map +1 -0
- package/dist/core/workflow-compiler-loop-rules.d.ts +13 -0
- package/dist/core/workflow-compiler-loop-rules.d.ts.map +1 -0
- package/dist/core/workflow-compiler-loop-rules.js +31 -0
- package/dist/core/workflow-compiler-loop-rules.js.map +1 -0
- package/dist/core/workflow-compiler-optional-rules.d.ts +14 -0
- package/dist/core/workflow-compiler-optional-rules.d.ts.map +1 -0
- package/dist/core/workflow-compiler-optional-rules.js +76 -0
- package/dist/core/workflow-compiler-optional-rules.js.map +1 -0
- package/dist/core/workflow-compiler-party-rules.d.ts +22 -0
- package/dist/core/workflow-compiler-party-rules.d.ts.map +1 -0
- package/dist/core/workflow-compiler-party-rules.js +146 -0
- package/dist/core/workflow-compiler-party-rules.js.map +1 -0
- package/dist/core/workflow-compiler-rules.d.ts +27 -0
- package/dist/core/workflow-compiler-rules.d.ts.map +1 -0
- package/dist/core/workflow-compiler-rules.js +284 -0
- package/dist/core/workflow-compiler-rules.js.map +1 -0
- package/dist/core/workflow-compiler-section-rules.d.ts +13 -0
- package/dist/core/workflow-compiler-section-rules.d.ts.map +1 -0
- package/dist/core/workflow-compiler-section-rules.js +57 -0
- package/dist/core/workflow-compiler-section-rules.js.map +1 -0
- package/dist/core/workflow-compiler-text-rules.d.ts +18 -0
- package/dist/core/workflow-compiler-text-rules.d.ts.map +1 -0
- package/dist/core/workflow-compiler-text-rules.js +82 -0
- package/dist/core/workflow-compiler-text-rules.js.map +1 -0
- package/dist/core/workflow-compiler.d.ts +52 -0
- package/dist/core/workflow-compiler.d.ts.map +1 -0
- package/dist/core/workflow-compiler.js +130 -0
- package/dist/core/workflow-compiler.js.map +1 -0
- package/dist/core/workflow-definition-facts.d.ts +32 -0
- package/dist/core/workflow-definition-facts.d.ts.map +1 -0
- package/dist/core/workflow-definition-facts.js +48 -0
- package/dist/core/workflow-definition-facts.js.map +1 -0
- package/dist/core/workflow-exports.d.ts +17 -0
- package/dist/core/workflow-exports.d.ts.map +1 -0
- package/dist/core/workflow-exports.js +17 -0
- package/dist/core/workflow-exports.js.map +1 -0
- package/dist/core/workflow-host-profiles.d.ts +44 -0
- package/dist/core/workflow-host-profiles.d.ts.map +1 -0
- package/dist/core/workflow-host-profiles.js +147 -0
- package/dist/core/workflow-host-profiles.js.map +1 -0
- package/dist/core/workflow-v2-authoring.d.ts +22 -0
- package/dist/core/workflow-v2-authoring.d.ts.map +1 -0
- package/dist/core/workflow-v2-authoring.js +88 -0
- package/dist/core/workflow-v2-authoring.js.map +1 -0
- package/dist/core/workflow-v2-loader.d.ts +26 -0
- package/dist/core/workflow-v2-loader.d.ts.map +1 -0
- package/dist/core/workflow-v2-loader.js +50 -0
- package/dist/core/workflow-v2-loader.js.map +1 -0
- package/dist/core/write-diagnostics.d.ts +69 -0
- package/dist/core/write-diagnostics.d.ts.map +1 -0
- package/dist/core/write-diagnostics.js +126 -0
- package/dist/core/write-diagnostics.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/controls.d.ts +26 -0
- package/dist/runtime/controls.d.ts.map +1 -0
- package/dist/runtime/controls.js +54 -0
- package/dist/runtime/controls.js.map +1 -0
- package/dist/runtime/dispatcher.d.ts +73 -0
- package/dist/runtime/dispatcher.d.ts.map +1 -0
- package/dist/runtime/dispatcher.js +178 -0
- package/dist/runtime/dispatcher.js.map +1 -0
- package/dist/runtime/event-log.d.ts +65 -0
- package/dist/runtime/event-log.d.ts.map +1 -0
- package/dist/runtime/event-log.js +189 -0
- package/dist/runtime/event-log.js.map +1 -0
- package/dist/runtime/evidence.d.ts +72 -0
- package/dist/runtime/evidence.d.ts.map +1 -0
- package/dist/runtime/evidence.js +80 -0
- package/dist/runtime/evidence.js.map +1 -0
- package/dist/runtime/guide-catalog.d.ts +70 -0
- package/dist/runtime/guide-catalog.d.ts.map +1 -0
- package/dist/runtime/guide-catalog.js +132 -0
- package/dist/runtime/guide-catalog.js.map +1 -0
- package/dist/runtime/human-checkpoint.d.ts +45 -0
- package/dist/runtime/human-checkpoint.d.ts.map +1 -0
- package/dist/runtime/human-checkpoint.js +73 -0
- package/dist/runtime/human-checkpoint.js.map +1 -0
- package/dist/runtime/index.d.ts +201 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +171 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/json-path.d.ts +31 -0
- package/dist/runtime/json-path.d.ts.map +1 -0
- package/dist/runtime/json-path.js +120 -0
- package/dist/runtime/json-path.js.map +1 -0
- package/dist/runtime/predicates.d.ts +37 -0
- package/dist/runtime/predicates.d.ts.map +1 -0
- package/dist/runtime/predicates.js +185 -0
- package/dist/runtime/predicates.js.map +1 -0
- package/dist/runtime/process-report-render.d.ts +10 -0
- package/dist/runtime/process-report-render.d.ts.map +1 -0
- package/dist/runtime/process-report-render.js +93 -0
- package/dist/runtime/process-report-render.js.map +1 -0
- package/dist/runtime/process-report.d.ts +78 -0
- package/dist/runtime/process-report.d.ts.map +1 -0
- package/dist/runtime/process-report.js +228 -0
- package/dist/runtime/process-report.js.map +1 -0
- package/dist/runtime/reconciliation.d.ts +31 -0
- package/dist/runtime/reconciliation.d.ts.map +1 -0
- package/dist/runtime/reconciliation.js +42 -0
- package/dist/runtime/reconciliation.js.map +1 -0
- package/dist/runtime/redaction.d.ts +19 -0
- package/dist/runtime/redaction.d.ts.map +1 -0
- package/dist/runtime/redaction.js +80 -0
- package/dist/runtime/redaction.js.map +1 -0
- package/dist/runtime/run-catalog.d.ts +65 -0
- package/dist/runtime/run-catalog.d.ts.map +1 -0
- package/dist/runtime/run-catalog.js +218 -0
- package/dist/runtime/run-catalog.js.map +1 -0
- package/dist/runtime/run-event-payload.d.ts +52 -0
- package/dist/runtime/run-event-payload.d.ts.map +1 -0
- package/dist/runtime/run-event-payload.js +60 -0
- package/dist/runtime/run-event-payload.js.map +1 -0
- package/dist/runtime/run-history.d.ts +80 -0
- package/dist/runtime/run-history.d.ts.map +1 -0
- package/dist/runtime/run-history.js +222 -0
- package/dist/runtime/run-history.js.map +1 -0
- package/dist/runtime/run-store.d.ts +60 -0
- package/dist/runtime/run-store.d.ts.map +1 -0
- package/dist/runtime/run-store.js +233 -0
- package/dist/runtime/run-store.js.map +1 -0
- package/dist/runtime/run-trail.d.ts +112 -0
- package/dist/runtime/run-trail.d.ts.map +1 -0
- package/dist/runtime/run-trail.js +187 -0
- package/dist/runtime/run-trail.js.map +1 -0
- package/dist/runtime/state-machine.d.ts +30 -0
- package/dist/runtime/state-machine.d.ts.map +1 -0
- package/dist/runtime/state-machine.js +170 -0
- package/dist/runtime/state-machine.js.map +1 -0
- package/dist/runtime/workflow-contract.d.ts +60 -0
- package/dist/runtime/workflow-contract.d.ts.map +1 -0
- package/dist/runtime/workflow-contract.js +142 -0
- package/dist/runtime/workflow-contract.js.map +1 -0
- package/dist/runtime/workflow-response.d.ts +27 -0
- package/dist/runtime/workflow-response.d.ts.map +1 -0
- package/dist/runtime/workflow-response.js +41 -0
- package/dist/runtime/workflow-response.js.map +1 -0
- package/dist/runtime/workflow-template.d.ts +18 -0
- package/dist/runtime/workflow-template.d.ts.map +1 -0
- package/dist/runtime/workflow-template.js +65 -0
- package/dist/runtime/workflow-template.js.map +1 -0
- package/dist/runtime/workflow-v1-cancel.d.ts +30 -0
- package/dist/runtime/workflow-v1-cancel.d.ts.map +1 -0
- package/dist/runtime/workflow-v1-cancel.js +89 -0
- package/dist/runtime/workflow-v1-cancel.js.map +1 -0
- package/dist/runtime/workflow-v2-context.d.ts +27 -0
- package/dist/runtime/workflow-v2-context.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-context.js +62 -0
- package/dist/runtime/workflow-v2-context.js.map +1 -0
- package/dist/runtime/workflow-v2-continuation.d.ts +23 -0
- package/dist/runtime/workflow-v2-continuation.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-continuation.js +36 -0
- package/dist/runtime/workflow-v2-continuation.js.map +1 -0
- package/dist/runtime/workflow-v2-dispatch.d.ts +58 -0
- package/dist/runtime/workflow-v2-dispatch.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-dispatch.js +125 -0
- package/dist/runtime/workflow-v2-dispatch.js.map +1 -0
- package/dist/runtime/workflow-v2-engine.d.ts +28 -0
- package/dist/runtime/workflow-v2-engine.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-engine.js +166 -0
- package/dist/runtime/workflow-v2-engine.js.map +1 -0
- package/dist/runtime/workflow-v2-failure-route.d.ts +28 -0
- package/dist/runtime/workflow-v2-failure-route.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-failure-route.js +101 -0
- package/dist/runtime/workflow-v2-failure-route.js.map +1 -0
- package/dist/runtime/workflow-v2-fields.d.ts +40 -0
- package/dist/runtime/workflow-v2-fields.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-fields.js +112 -0
- package/dist/runtime/workflow-v2-fields.js.map +1 -0
- package/dist/runtime/workflow-v2-finalize.d.ts +29 -0
- package/dist/runtime/workflow-v2-finalize.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-finalize.js +167 -0
- package/dist/runtime/workflow-v2-finalize.js.map +1 -0
- package/dist/runtime/workflow-v2-handover.d.ts +43 -0
- package/dist/runtime/workflow-v2-handover.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-handover.js +124 -0
- package/dist/runtime/workflow-v2-handover.js.map +1 -0
- package/dist/runtime/workflow-v2-human-response.d.ts +17 -0
- package/dist/runtime/workflow-v2-human-response.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-human-response.js +133 -0
- package/dist/runtime/workflow-v2-human-response.js.map +1 -0
- package/dist/runtime/workflow-v2-human.d.ts +46 -0
- package/dist/runtime/workflow-v2-human.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-human.js +132 -0
- package/dist/runtime/workflow-v2-human.js.map +1 -0
- package/dist/runtime/workflow-v2-labels.d.ts +26 -0
- package/dist/runtime/workflow-v2-labels.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-labels.js +75 -0
- package/dist/runtime/workflow-v2-labels.js.map +1 -0
- package/dist/runtime/workflow-v2-notes.d.ts +58 -0
- package/dist/runtime/workflow-v2-notes.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-notes.js +124 -0
- package/dist/runtime/workflow-v2-notes.js.map +1 -0
- package/dist/runtime/workflow-v2-observation.d.ts +22 -0
- package/dist/runtime/workflow-v2-observation.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-observation.js +163 -0
- package/dist/runtime/workflow-v2-observation.js.map +1 -0
- package/dist/runtime/workflow-v2-operator-words.d.ts +50 -0
- package/dist/runtime/workflow-v2-operator-words.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-operator-words.js +93 -0
- package/dist/runtime/workflow-v2-operator-words.js.map +1 -0
- package/dist/runtime/workflow-v2-parties.d.ts +60 -0
- package/dist/runtime/workflow-v2-parties.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-parties.js +115 -0
- package/dist/runtime/workflow-v2-parties.js.map +1 -0
- package/dist/runtime/workflow-v2-party-state.d.ts +75 -0
- package/dist/runtime/workflow-v2-party-state.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-party-state.js +98 -0
- package/dist/runtime/workflow-v2-party-state.js.map +1 -0
- package/dist/runtime/workflow-v2-receipt.d.ts +54 -0
- package/dist/runtime/workflow-v2-receipt.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-receipt.js +252 -0
- package/dist/runtime/workflow-v2-receipt.js.map +1 -0
- package/dist/runtime/workflow-v2-reply.d.ts +30 -0
- package/dist/runtime/workflow-v2-reply.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-reply.js +52 -0
- package/dist/runtime/workflow-v2-reply.js.map +1 -0
- package/dist/runtime/workflow-v2-report-events.d.ts +70 -0
- package/dist/runtime/workflow-v2-report-events.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-report-events.js +97 -0
- package/dist/runtime/workflow-v2-report-events.js.map +1 -0
- package/dist/runtime/workflow-v2-report-render.d.ts +18 -0
- package/dist/runtime/workflow-v2-report-render.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-report-render.js +248 -0
- package/dist/runtime/workflow-v2-report-render.js.map +1 -0
- package/dist/runtime/workflow-v2-report.d.ts +134 -0
- package/dist/runtime/workflow-v2-report.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-report.js +206 -0
- package/dist/runtime/workflow-v2-report.js.map +1 -0
- package/dist/runtime/workflow-v2-revise-open.d.ts +27 -0
- package/dist/runtime/workflow-v2-revise-open.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-revise-open.js +79 -0
- package/dist/runtime/workflow-v2-revise-open.js.map +1 -0
- package/dist/runtime/workflow-v2-revise.d.ts +24 -0
- package/dist/runtime/workflow-v2-revise.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-revise.js +192 -0
- package/dist/runtime/workflow-v2-revise.js.map +1 -0
- package/dist/runtime/workflow-v2-routing.d.ts +43 -0
- package/dist/runtime/workflow-v2-routing.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-routing.js +123 -0
- package/dist/runtime/workflow-v2-routing.js.map +1 -0
- package/dist/runtime/workflow-v2-run-events.d.ts +49 -0
- package/dist/runtime/workflow-v2-run-events.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-run-events.js +85 -0
- package/dist/runtime/workflow-v2-run-events.js.map +1 -0
- package/dist/runtime/workflow-v2-run.d.ts +80 -0
- package/dist/runtime/workflow-v2-run.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-run.js +137 -0
- package/dist/runtime/workflow-v2-run.js.map +1 -0
- package/dist/runtime/workflow-v2-runtime-steps.d.ts +35 -0
- package/dist/runtime/workflow-v2-runtime-steps.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-runtime-steps.js +138 -0
- package/dist/runtime/workflow-v2-runtime-steps.js.map +1 -0
- package/dist/runtime/workflow-v2-skip.d.ts +20 -0
- package/dist/runtime/workflow-v2-skip.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-skip.js +77 -0
- package/dist/runtime/workflow-v2-skip.js.map +1 -0
- package/dist/runtime/workflow-v2-step-text.d.ts +23 -0
- package/dist/runtime/workflow-v2-step-text.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-step-text.js +34 -0
- package/dist/runtime/workflow-v2-step-text.js.map +1 -0
- package/dist/runtime/workflow-v2-submission.d.ts +64 -0
- package/dist/runtime/workflow-v2-submission.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-submission.js +99 -0
- package/dist/runtime/workflow-v2-submission.js.map +1 -0
- package/dist/runtime/workflow-v2-types.d.ts +208 -0
- package/dist/runtime/workflow-v2-types.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-types.js +140 -0
- package/dist/runtime/workflow-v2-types.js.map +1 -0
- package/dist/runtime/workflow-v2-variables.d.ts +11 -0
- package/dist/runtime/workflow-v2-variables.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-variables.js +63 -0
- package/dist/runtime/workflow-v2-variables.js.map +1 -0
- package/dist/runtime/workflow-v2-wait.d.ts +34 -0
- package/dist/runtime/workflow-v2-wait.d.ts.map +1 -0
- package/dist/runtime/workflow-v2-wait.js +53 -0
- package/dist/runtime/workflow-v2-wait.js.map +1 -0
- package/dist/runtime/workspace-fingerprint.d.ts +15 -0
- package/dist/runtime/workspace-fingerprint.d.ts.map +1 -0
- package/dist/runtime/workspace-fingerprint.js +36 -0
- package/dist/runtime/workspace-fingerprint.js.map +1 -0
- package/dist/schemas/coord.d.ts +246 -0
- package/dist/schemas/coord.d.ts.map +1 -0
- package/dist/schemas/coord.js +122 -0
- package/dist/schemas/coord.js.map +1 -0
- package/dist/schemas/counters.schema.d.ts +10 -0
- package/dist/schemas/counters.schema.d.ts.map +1 -0
- package/dist/schemas/counters.schema.js +13 -0
- package/dist/schemas/counters.schema.js.map +1 -0
- package/dist/schemas/expedition.d.ts +52 -0
- package/dist/schemas/expedition.d.ts.map +1 -0
- package/dist/schemas/expedition.js +45 -0
- package/dist/schemas/expedition.js.map +1 -0
- package/dist/schemas/guide-acceptance.d.ts +170 -0
- package/dist/schemas/guide-acceptance.d.ts.map +1 -0
- package/dist/schemas/guide-acceptance.js +93 -0
- package/dist/schemas/guide-acceptance.js.map +1 -0
- package/dist/schemas/index-refs.schema.d.ts +12 -11
- package/dist/schemas/index-refs.schema.d.ts.map +1 -1
- package/dist/schemas/index-refs.schema.js +13 -6
- package/dist/schemas/index-refs.schema.js.map +1 -1
- package/dist/schemas/index.d.ts +118 -81
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +83 -27
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/item-id.d.ts +15 -0
- package/dist/schemas/item-id.d.ts.map +1 -0
- package/dist/schemas/item-id.js +29 -0
- package/dist/schemas/item-id.js.map +1 -0
- package/dist/schemas/relationships.d.ts +6 -7
- package/dist/schemas/relationships.d.ts.map +1 -1
- package/dist/schemas/relationships.js +11 -11
- package/dist/schemas/relationships.js.map +1 -1
- package/dist/schemas/task-workflow.d.ts +206 -0
- package/dist/schemas/task-workflow.d.ts.map +1 -0
- package/dist/schemas/task-workflow.js +102 -0
- package/dist/schemas/task-workflow.js.map +1 -0
- package/dist/schemas/test-profile.d.ts +13 -0
- package/dist/schemas/test-profile.d.ts.map +1 -0
- package/dist/schemas/test-profile.js +9 -0
- package/dist/schemas/test-profile.js.map +1 -0
- package/dist/schemas/test-workflow.d.ts +117 -0
- package/dist/schemas/test-workflow.d.ts.map +1 -0
- package/dist/schemas/test-workflow.js +69 -0
- package/dist/schemas/test-workflow.js.map +1 -0
- package/dist/schemas/workflow-definition-v2.d.ts +554 -0
- package/dist/schemas/workflow-definition-v2.d.ts.map +1 -0
- package/dist/schemas/workflow-definition-v2.js +161 -0
- package/dist/schemas/workflow-definition-v2.js.map +1 -0
- package/dist/schemas/workflow-graph.d.ts +29 -0
- package/dist/schemas/workflow-graph.d.ts.map +1 -0
- package/dist/schemas/workflow-graph.js +83 -0
- package/dist/schemas/workflow-graph.js.map +1 -0
- package/dist/schemas/workflow-v2-contracts.d.ts +248 -0
- package/dist/schemas/workflow-v2-contracts.d.ts.map +1 -0
- package/dist/schemas/workflow-v2-contracts.js +236 -0
- package/dist/schemas/workflow-v2-contracts.js.map +1 -0
- package/dist/schemas/workflow-v2-vocabulary.d.ts +93 -0
- package/dist/schemas/workflow-v2-vocabulary.d.ts.map +1 -0
- package/dist/schemas/workflow-v2-vocabulary.js +89 -0
- package/dist/schemas/workflow-v2-vocabulary.js.map +1 -0
- package/dist/templates/diataxis.d.ts +20 -0
- package/dist/templates/diataxis.d.ts.map +1 -0
- package/dist/templates/diataxis.js +176 -0
- package/dist/templates/diataxis.js.map +1 -0
- package/dist/templates/epic.d.ts +27 -0
- package/dist/templates/epic.d.ts.map +1 -0
- package/dist/templates/epic.js +67 -0
- package/dist/templates/epic.js.map +1 -0
- package/dist/templates/madr.d.ts +17 -0
- package/dist/templates/madr.d.ts.map +1 -0
- package/dist/templates/madr.js +61 -0
- package/dist/templates/madr.js.map +1 -0
- package/dist/templates/reminders.d.ts +28 -0
- package/dist/templates/reminders.d.ts.map +1 -0
- package/dist/templates/reminders.js +54 -0
- package/dist/templates/reminders.js.map +1 -0
- package/dist/templates/story.d.ts +24 -0
- package/dist/templates/story.d.ts.map +1 -0
- package/dist/templates/story.js +36 -0
- package/dist/templates/story.js.map +1 -0
- package/dist/templates/task-workflow.d.ts +9 -0
- package/dist/templates/task-workflow.d.ts.map +1 -0
- package/dist/templates/task-workflow.js +39 -0
- package/dist/templates/task-workflow.js.map +1 -0
- package/dist/templates/test-workflow.d.ts +9 -0
- package/dist/templates/test-workflow.d.ts.map +1 -0
- package/dist/templates/test-workflow.js +36 -0
- package/dist/templates/test-workflow.js.map +1 -0
- package/dist/types/commands.d.ts +1 -0
- package/dist/types/commands.d.ts.map +1 -1
- package/dist/types/commands.js +3 -0
- package/dist/types/commands.js.map +1 -1
- package/dist/types/docs-map.d.ts +110 -0
- package/dist/types/docs-map.d.ts.map +1 -0
- package/dist/types/docs-map.js +15 -0
- package/dist/types/docs-map.js.map +1 -0
- package/dist/types/index-refs.types.d.ts.map +1 -1
- package/dist/types/index-refs.types.js +1 -0
- package/dist/types/index-refs.types.js.map +1 -1
- package/dist/types/index.d.ts +2 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/agent-files-payload.d.ts +66 -0
- package/dist/utils/agent-files-payload.d.ts.map +1 -0
- package/dist/utils/agent-files-payload.js +153 -0
- package/dist/utils/agent-files-payload.js.map +1 -0
- package/dist/utils/agent-files-prune.d.ts +49 -0
- package/dist/utils/agent-files-prune.d.ts.map +1 -0
- package/dist/utils/agent-files-prune.js +164 -0
- package/dist/utils/agent-files-prune.js.map +1 -0
- package/dist/utils/agent-files-snapshot.d.ts +31 -0
- package/dist/utils/agent-files-snapshot.d.ts.map +1 -0
- package/dist/utils/agent-files-snapshot.js +128 -0
- package/dist/utils/agent-files-snapshot.js.map +1 -0
- package/dist/utils/atomic-write.d.ts +56 -0
- package/dist/utils/atomic-write.d.ts.map +1 -0
- package/dist/utils/atomic-write.js +129 -0
- package/dist/utils/atomic-write.js.map +1 -0
- package/dist/utils/backup-github-files.d.ts +7 -26
- package/dist/utils/backup-github-files.d.ts.map +1 -1
- package/dist/utils/backup-github-files.js +36 -113
- package/dist/utils/backup-github-files.js.map +1 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/claude-host.d.ts +48 -0
- package/dist/utils/claude-host.d.ts.map +1 -0
- package/dist/utils/claude-host.js +72 -0
- package/dist/utils/claude-host.js.map +1 -0
- package/dist/utils/codex-config.d.ts +14 -0
- package/dist/utils/codex-config.d.ts.map +1 -0
- package/dist/utils/codex-config.js +93 -0
- package/dist/utils/codex-config.js.map +1 -0
- package/dist/utils/codex-ignore.d.ts +19 -0
- package/dist/utils/codex-ignore.d.ts.map +1 -0
- package/dist/utils/codex-ignore.js +92 -0
- package/dist/utils/codex-ignore.js.map +1 -0
- package/dist/utils/codex-manifest.d.ts +72 -0
- package/dist/utils/codex-manifest.d.ts.map +1 -0
- package/dist/utils/codex-manifest.js +63 -0
- package/dist/utils/codex-manifest.js.map +1 -0
- package/dist/utils/codex-mcp-input.d.ts +7 -0
- package/dist/utils/codex-mcp-input.d.ts.map +1 -0
- package/dist/utils/codex-mcp-input.js +14 -0
- package/dist/utils/codex-mcp-input.js.map +1 -0
- package/dist/utils/codex-payload.d.ts +19 -0
- package/dist/utils/codex-payload.d.ts.map +1 -0
- package/dist/utils/codex-payload.js +133 -0
- package/dist/utils/codex-payload.js.map +1 -0
- package/dist/utils/codex-plan.d.ts +8 -0
- package/dist/utils/codex-plan.d.ts.map +1 -0
- package/dist/utils/codex-plan.js +137 -0
- package/dist/utils/codex-plan.js.map +1 -0
- package/dist/utils/codex-setup.d.ts +12 -0
- package/dist/utils/codex-setup.d.ts.map +1 -0
- package/dist/utils/codex-setup.js +130 -0
- package/dist/utils/codex-setup.js.map +1 -0
- package/dist/utils/codex-spans.d.ts +27 -0
- package/dist/utils/codex-spans.d.ts.map +1 -0
- package/dist/utils/codex-spans.js +69 -0
- package/dist/utils/codex-spans.js.map +1 -0
- package/dist/utils/codex-state.d.ts +14 -0
- package/dist/utils/codex-state.d.ts.map +1 -0
- package/dist/utils/codex-state.js +64 -0
- package/dist/utils/codex-state.js.map +1 -0
- package/dist/utils/codex-types.d.ts +49 -0
- package/dist/utils/codex-types.d.ts.map +1 -0
- package/dist/utils/codex-types.js +46 -0
- package/dist/utils/codex-types.js.map +1 -0
- package/dist/utils/contract-block.d.ts +79 -0
- package/dist/utils/contract-block.d.ts.map +1 -0
- package/dist/utils/contract-block.js +153 -0
- package/dist/utils/contract-block.js.map +1 -0
- package/dist/utils/contract-staleness.d.ts +22 -0
- package/dist/utils/contract-staleness.d.ts.map +1 -0
- package/dist/utils/contract-staleness.js +67 -0
- package/dist/utils/contract-staleness.js.map +1 -0
- package/dist/utils/index.d.ts +14 -37
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +68 -120
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/init-helpers.d.ts +8 -6
- package/dist/utils/init-helpers.d.ts.map +1 -1
- package/dist/utils/init-helpers.js +54 -102
- package/dist/utils/init-helpers.js.map +1 -1
- package/dist/utils/mcp-tool-groups.d.ts +101 -0
- package/dist/utils/mcp-tool-groups.d.ts.map +1 -0
- package/dist/utils/mcp-tool-groups.js +117 -0
- package/dist/utils/mcp-tool-groups.js.map +1 -0
- package/dist/utils/packaged-github.d.ts +23 -0
- package/dist/utils/packaged-github.d.ts.map +1 -0
- package/dist/utils/packaged-github.js +38 -0
- package/dist/utils/packaged-github.js.map +1 -0
- package/dist/utils/setup-guide.d.ts +7 -0
- package/dist/utils/setup-guide.d.ts.map +1 -0
- package/dist/utils/setup-guide.js +87 -0
- package/dist/utils/setup-guide.js.map +1 -0
- package/dist/utils/snapshot-manifest.d.ts +36 -0
- package/dist/utils/snapshot-manifest.d.ts.map +1 -0
- package/dist/utils/snapshot-manifest.js +116 -0
- package/dist/utils/snapshot-manifest.js.map +1 -0
- package/dist/utils/snapshot-paths.d.ts +21 -0
- package/dist/utils/snapshot-paths.d.ts.map +1 -0
- package/dist/utils/snapshot-paths.js +111 -0
- package/dist/utils/snapshot-paths.js.map +1 -0
- package/dist/utils/snapshot-retention.d.ts +12 -0
- package/dist/utils/snapshot-retention.d.ts.map +1 -0
- package/dist/utils/snapshot-retention.js +71 -0
- package/dist/utils/snapshot-retention.js.map +1 -0
- package/dist/utils/text-file.d.ts +13 -0
- package/dist/utils/text-file.d.ts.map +1 -0
- package/dist/utils/text-file.js +19 -0
- package/dist/utils/text-file.js.map +1 -0
- package/dist/utils/update-agent-files.d.ts +63 -0
- package/dist/utils/update-agent-files.d.ts.map +1 -0
- package/dist/utils/update-agent-files.js +248 -0
- package/dist/utils/update-agent-files.js.map +1 -0
- package/dist/utils/update-copilot-files.d.ts +4 -2
- package/dist/utils/update-copilot-files.d.ts.map +1 -1
- package/dist/utils/update-copilot-files.js +52 -12
- package/dist/utils/update-copilot-files.js.map +1 -1
- package/package.json +14 -10
- package/dist/agents.test.d.ts +0 -18
- package/dist/agents.test.d.ts.map +0 -1
- package/dist/agents.test.js +0 -96
- package/dist/agents.test.js.map +0 -1
- package/dist/core/auto-migrate.test.d.ts +0 -7
- package/dist/core/auto-migrate.test.d.ts.map +0 -1
- package/dist/core/auto-migrate.test.js +0 -368
- package/dist/core/auto-migrate.test.js.map +0 -1
- package/dist/core/context.test.d.ts +0 -10
- package/dist/core/context.test.d.ts.map +0 -1
- package/dist/core/context.test.js +0 -239
- package/dist/core/context.test.js.map +0 -1
- package/dist/core/index-rebuild.test.d.ts +0 -8
- package/dist/core/index-rebuild.test.d.ts.map +0 -1
- package/dist/core/index-rebuild.test.js +0 -563
- package/dist/core/index-rebuild.test.js.map +0 -1
- package/dist/core/index-refs.test.d.ts +0 -7
- package/dist/core/index-refs.test.d.ts.map +0 -1
- package/dist/core/index-refs.test.js +0 -367
- package/dist/core/index-refs.test.js.map +0 -1
- package/dist/schemas/analysis.d.ts +0 -206
- package/dist/schemas/analysis.d.ts.map +0 -1
- package/dist/schemas/analysis.js +0 -138
- package/dist/schemas/analysis.js.map +0 -1
- package/dist/schemas/cbp-loops.d.ts +0 -154
- package/dist/schemas/cbp-loops.d.ts.map +0 -1
- package/dist/schemas/cbp-loops.js +0 -160
- package/dist/schemas/cbp-loops.js.map +0 -1
- package/dist/schemas/cbp-loops.test.d.ts +0 -10
- package/dist/schemas/cbp-loops.test.d.ts.map +0 -1
- package/dist/schemas/cbp-loops.test.js +0 -268
- package/dist/schemas/cbp-loops.test.js.map +0 -1
- package/dist/schemas/cbp-mandate.d.ts +0 -242
- package/dist/schemas/cbp-mandate.d.ts.map +0 -1
- package/dist/schemas/cbp-mandate.js +0 -210
- package/dist/schemas/cbp-mandate.js.map +0 -1
- package/dist/schemas/cbp-mandate.test.d.ts +0 -11
- package/dist/schemas/cbp-mandate.test.d.ts.map +0 -1
- package/dist/schemas/cbp-mandate.test.js +0 -312
- package/dist/schemas/cbp-mandate.test.js.map +0 -1
- package/dist/utils/normalize.test.d.ts +0 -15
- package/dist/utils/normalize.test.d.ts.map +0 -1
- package/dist/utils/normalize.test.js +0 -101
- package/dist/utils/normalize.test.js.map +0 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2026 Thomas Hertel (the@devsteps.dev)
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* Read-only access to stored metadata, including schema-invalid JSON (TASK-1069).
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
8
|
+
import { ItemMetadata } from '../schemas/index.js';
|
|
9
|
+
import { itemPaths, listAttachments } from './item-paths.js';
|
|
10
|
+
import { StaleItemError } from './item-store.js';
|
|
11
|
+
import { describeZodIssues } from './item-validation.js';
|
|
12
|
+
function sameStamp(left, right) {
|
|
13
|
+
return left.mtimeMs === right.mtimeMs && left.size === right.size;
|
|
14
|
+
}
|
|
15
|
+
function isMissing(error) {
|
|
16
|
+
return error instanceof Error && 'code' in error && error.code === 'ENOENT';
|
|
17
|
+
}
|
|
18
|
+
/** Read only metadata, rejecting a change between the surrounding stat calls. */
|
|
19
|
+
function readSnapshotText(devstepsDir, id, expected) {
|
|
20
|
+
const path = itemPaths(devstepsDir, id).metadata;
|
|
21
|
+
let before;
|
|
22
|
+
try {
|
|
23
|
+
const stat = statSync(path);
|
|
24
|
+
before = { mtimeMs: stat.mtimeMs, size: stat.size };
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (!isMissing(error))
|
|
28
|
+
throw error;
|
|
29
|
+
if (expected)
|
|
30
|
+
throw new StaleItemError(id);
|
|
31
|
+
throw new Error(`Item not found: ${id}`);
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const bytes = readFileSync(path);
|
|
35
|
+
const text = bytes.toString('utf-8');
|
|
36
|
+
const stat = statSync(path);
|
|
37
|
+
const stamp = { mtimeMs: stat.mtimeMs, size: stat.size };
|
|
38
|
+
if (!sameStamp(before, stamp) ||
|
|
39
|
+
(expected && (!sameStamp(expected.stamp, stamp) || expected.text !== text))) {
|
|
40
|
+
throw new StaleItemError(id);
|
|
41
|
+
}
|
|
42
|
+
if (!Buffer.from(text, 'utf-8').equals(bytes)) {
|
|
43
|
+
if (expected)
|
|
44
|
+
throw new StaleItemError(id);
|
|
45
|
+
throw new Error(`Item ${id} is not valid UTF-8 JSON; raw inspection requires valid UTF-8.`);
|
|
46
|
+
}
|
|
47
|
+
return { text, stamp };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (isMissing(error))
|
|
51
|
+
throw new StaleItemError(id);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load the stored JSON without interpreting or repairing its domain fields.
|
|
57
|
+
* Parser diagnostics are omitted because they can include metadata contents.
|
|
58
|
+
*/
|
|
59
|
+
export function readRawItemSnapshot(devstepsDir, id) {
|
|
60
|
+
const snapshot = readSnapshotText(devstepsDir, id);
|
|
61
|
+
let raw;
|
|
62
|
+
try {
|
|
63
|
+
raw = JSON.parse(snapshot.text);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw new Error(`Item ${id} is not valid JSON; raw inspection requires valid JSON.`);
|
|
67
|
+
}
|
|
68
|
+
return { ...snapshot, raw };
|
|
69
|
+
}
|
|
70
|
+
/** Compare both the loaded source and stamp; a missing target is also stale. */
|
|
71
|
+
export function assertRawItemSnapshot(devstepsDir, id, snapshot) {
|
|
72
|
+
readSnapshotText(devstepsDir, id, snapshot);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Inspect stored data without inventing work-item identity, defaults or lifecycle intent.
|
|
76
|
+
* Validation supplies issues only; its parsed/defaulted output is never returned.
|
|
77
|
+
*/
|
|
78
|
+
export function inspectRawItem(devstepsDir, id) {
|
|
79
|
+
const snapshot = readRawItemSnapshot(devstepsDir, id);
|
|
80
|
+
const parsed = ItemMetadata.safeParse(snapshot.raw);
|
|
81
|
+
let description = '';
|
|
82
|
+
try {
|
|
83
|
+
description = readFileSync(itemPaths(devstepsDir, id).description, 'utf-8');
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (!isMissing(error))
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
requested_id: id,
|
|
91
|
+
raw_metadata: snapshot.raw,
|
|
92
|
+
schema_valid: parsed.success,
|
|
93
|
+
schema_issues: parsed.success ? [] : describeZodIssues(parsed.error.issues, snapshot.raw),
|
|
94
|
+
description,
|
|
95
|
+
attachments: listAttachments(devstepsDir, id),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=item-raw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-raw.js","sourceRoot":"","sources":["../../src/core/item-raw.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAuB,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAkB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAmBzD,SAAS,SAAS,CAAC,IAAe,EAAE,KAAgB;IAClD,OAAO,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,iFAAiF;AACjF,SAAS,gBAAgB,CACvB,WAAmB,EACnB,EAAU,EACV,QAA0B;IAE1B,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;IACjD,IAAI,MAAiB,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACnC,IAAI,QAAQ;YAAE,MAAM,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACzD,IACE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;YACzB,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAC3E,CAAC;YACD,MAAM,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,IAAI,QAAQ;gBAAE,MAAM,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,gEAAgE,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,EAAU;IACjE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,yDAAyD,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC9B,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,EAAU,EACV,QAAyB;IAEzB,gBAAgB,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,EAAU;IAC5D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;IACrC,CAAC;IACD,OAAO;QACL,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,QAAQ,CAAC,GAAG;QAC1B,YAAY,EAAE,MAAM,CAAC,OAAO;QAC5B,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;QACzF,WAAW;QACX,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2026 Thomas Hertel (the@devsteps.dev)
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* Item store — the in-memory, file-validated view of every item in a project.
|
|
6
|
+
*
|
|
7
|
+
* The item files are the only source of truth (STORY-426). This module keeps one
|
|
8
|
+
* store per `.devsteps` directory: an entry is served from memory while the item's
|
|
9
|
+
* JSON and Markdown files still carry the `mtime` and `size` recorded at the last
|
|
10
|
+
* read, and is re-read otherwise. Nothing on disk has to be kept in step with it,
|
|
11
|
+
* so an edit in the editor, a `git checkout`, or a write from another process is
|
|
12
|
+
* seen on the next call — and there is no tracked index left that could drift.
|
|
13
|
+
*
|
|
14
|
+
* The same stamps guard the writers (STORY-428): a write that expects the stamp it
|
|
15
|
+
* read is refused when another process wrote the file in between.
|
|
16
|
+
*
|
|
17
|
+
* Metadata and description are cached apart, each under its own stamp (TASK-914):
|
|
18
|
+
* `readAllItemMetadata` — the path `list` and everything built on it take — never
|
|
19
|
+
* opens an `<ID>.md`, and a description is read only when a caller asks for it.
|
|
20
|
+
*
|
|
21
|
+
* Measured on 1653 items: a cold read takes ~200 ms, the warm stat pass ~15 ms,
|
|
22
|
+
* and the whole store ~7.5 MB of heap.
|
|
23
|
+
*/
|
|
24
|
+
import { ItemMetadata, type ItemType } from '../schemas/index.js';
|
|
25
|
+
/**
|
|
26
|
+
* Descriptions retained in memory per store. Metadata is always retained; a
|
|
27
|
+
* description beyond this budget is read from disk on each call instead.
|
|
28
|
+
*/
|
|
29
|
+
export declare const DESCRIPTION_RETENTION_LIMIT: number;
|
|
30
|
+
/** What identifies one version of a file: enough to notice any write to it. */
|
|
31
|
+
export interface FileStamp {
|
|
32
|
+
mtimeMs: number;
|
|
33
|
+
size: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* An item as the store holds it. `readAllItems` hands out the store's own objects
|
|
37
|
+
* for speed: project them, never mutate them. `readItem` returns a copy.
|
|
38
|
+
*/
|
|
39
|
+
export interface StoredItemMetadata {
|
|
40
|
+
readonly metadata: ItemMetadata;
|
|
41
|
+
/** Stamp of the metadata file as read — pass it to `writeItemMetadata` to guard the write. */
|
|
42
|
+
readonly stamp: FileStamp;
|
|
43
|
+
}
|
|
44
|
+
export interface StoredItem extends StoredItemMetadata {
|
|
45
|
+
readonly description: string;
|
|
46
|
+
/**
|
|
47
|
+
* Stamp of the `<ID>.md` as read; null when the item has no Markdown file. Pass it with
|
|
48
|
+
* `stamp` to `writeItemDescription` to guard the write against a change in between.
|
|
49
|
+
*/
|
|
50
|
+
readonly descriptionStamp: FileStamp | null;
|
|
51
|
+
}
|
|
52
|
+
/** The stamps a guarded description write expects to find still on disk. */
|
|
53
|
+
export interface ExpectedItemStamps {
|
|
54
|
+
metadata: FileStamp;
|
|
55
|
+
description: FileStamp | null;
|
|
56
|
+
}
|
|
57
|
+
export interface ReadAllItemsResult<T extends StoredItemMetadata = StoredItem> {
|
|
58
|
+
items: T[];
|
|
59
|
+
/** IDs whose file exists but could not be parsed (STORY-391) — never silently dropped. */
|
|
60
|
+
unreadable: string[];
|
|
61
|
+
}
|
|
62
|
+
export interface ItemStoreStats {
|
|
63
|
+
entries: number;
|
|
64
|
+
retainedDescriptionBytes: number;
|
|
65
|
+
}
|
|
66
|
+
/** Thrown when a guarded write finds the file changed since it was read. */
|
|
67
|
+
export declare class StaleItemError extends Error {
|
|
68
|
+
readonly itemId: string;
|
|
69
|
+
readonly code = "STALE_ITEM";
|
|
70
|
+
constructor(itemId: string);
|
|
71
|
+
}
|
|
72
|
+
/** Test hook: lower the description budget without touching the constant. */
|
|
73
|
+
export declare function configureItemStore(options: {
|
|
74
|
+
descriptionRetentionBytes?: number;
|
|
75
|
+
}): void;
|
|
76
|
+
/** Every item ID on disk, discovered from the item folders — no index involved. */
|
|
77
|
+
export declare function listItemIds(devstepsDir: string, type?: ItemType): string[];
|
|
78
|
+
/**
|
|
79
|
+
* Read one item. Throws for an unknown ID, a missing file, or a schema violation —
|
|
80
|
+
* the strictness `getItem()` has always had. The metadata is a copy the caller may
|
|
81
|
+
* patch and write back through `writeItemMetadata`.
|
|
82
|
+
*/
|
|
83
|
+
export declare function readItem(devstepsDir: string, id: string): StoredItem;
|
|
84
|
+
/** `readItem` without the description: never opens the `<ID>.md`. Same errors, a copy too. */
|
|
85
|
+
export declare function readItemMetadata(devstepsDir: string, id: string): StoredItemMetadata;
|
|
86
|
+
/**
|
|
87
|
+
* Read every item, or every item of one type. An entry the store still holds for
|
|
88
|
+
* an ID that is no longer on disk is dropped on the way.
|
|
89
|
+
*
|
|
90
|
+
* A folder without its `<ID>.json` is skipped, not reported: a parallel `add` has
|
|
91
|
+
* claimed it and not written yet (STORY-428). `doctor` names one that stays empty.
|
|
92
|
+
*/
|
|
93
|
+
export declare function readAllItems(devstepsDir: string, type?: ItemType): ReadAllItemsResult;
|
|
94
|
+
/**
|
|
95
|
+
* `readAllItems` without descriptions: reads and validates only the `<ID>.json`
|
|
96
|
+
* files, so it never opens an `<ID>.md`. Same discovery, skipping, and reporting.
|
|
97
|
+
*/
|
|
98
|
+
export declare function readAllItemMetadata(devstepsDir: string, type?: ItemType): ReadAllItemsResult<StoredItemMetadata>;
|
|
99
|
+
/** Throw `StaleItemError` when the item's metadata file no longer carries `expected`. */
|
|
100
|
+
export declare function assertItemUnchanged(devstepsDir: string, id: string, expected: FileStamp): void;
|
|
101
|
+
/** Refuses with `StaleItemError` when the metadata or the `<ID>.md` changed since `expected`. */
|
|
102
|
+
export declare function assertItemStamps(devstepsDir: string, id: string, expected: ExpectedItemStamps): void;
|
|
103
|
+
/**
|
|
104
|
+
* Write an item's metadata atomically (STORY-428). With `expected`, the write is
|
|
105
|
+
* refused when the file changed since that stamp was read — the caller re-reads
|
|
106
|
+
* and retries instead of overwriting another process's change.
|
|
107
|
+
*/
|
|
108
|
+
export declare function writeItemMetadata(devstepsDir: string, metadata: ItemMetadata, expected?: FileStamp): void;
|
|
109
|
+
/**
|
|
110
|
+
* Write an item's master document atomically. With `expected`, both the metadata and the
|
|
111
|
+
* `<ID>.md` stamp are checked immediately before the temp-file rename and the write is
|
|
112
|
+
* refused with `StaleItemError` when either changed; without it the write is blind.
|
|
113
|
+
*/
|
|
114
|
+
export declare function writeItemDescription(devstepsDir: string, id: string, description: string, expected?: ExpectedItemStamps): void;
|
|
115
|
+
/** Drop one entry; writers call this after touching the item's files. */
|
|
116
|
+
export declare function invalidateItem(devstepsDir: string, id: string): void;
|
|
117
|
+
/** Drop a whole store — after a migration, or when a test wants a cold start. */
|
|
118
|
+
export declare function invalidateStore(devstepsDir: string): void;
|
|
119
|
+
export declare function itemStoreStats(devstepsDir: string): ItemStoreStats;
|
|
120
|
+
//# sourceMappingURL=item-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-store.d.ts","sourceRoot":"","sources":["../../src/core/item-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2026 Thomas Hertel (the@devsteps.dev)
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* Item store — the in-memory, file-validated view of every item in a project.
|
|
6
|
+
*
|
|
7
|
+
* The item files are the only source of truth (STORY-426). This module keeps one
|
|
8
|
+
* store per `.devsteps` directory: an entry is served from memory while the item's
|
|
9
|
+
* JSON and Markdown files still carry the `mtime` and `size` recorded at the last
|
|
10
|
+
* read, and is re-read otherwise. Nothing on disk has to be kept in step with it,
|
|
11
|
+
* so an edit in the editor, a `git checkout`, or a write from another process is
|
|
12
|
+
* seen on the next call — and there is no tracked index left that could drift.
|
|
13
|
+
*
|
|
14
|
+
* The same stamps guard the writers (STORY-428): a write that expects the stamp it
|
|
15
|
+
* read is refused when another process wrote the file in between.
|
|
16
|
+
*
|
|
17
|
+
* Metadata and description are cached apart, each under its own stamp (TASK-914):
|
|
18
|
+
* `readAllItemMetadata` — the path `list` and everything built on it take — never
|
|
19
|
+
* opens an `<ID>.md`, and a description is read only when a caller asks for it.
|
|
20
|
+
*
|
|
21
|
+
* Measured on 1653 items: a cold read takes ~200 ms, the warm stat pass ~15 ms,
|
|
22
|
+
* and the whole store ~7.5 MB of heap.
|
|
23
|
+
*/
|
|
24
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
25
|
+
import { ItemMetadata } from '../schemas/index.js';
|
|
26
|
+
import { writeFileAtomic, writeJsonAtomic } from '../utils/atomic-write.js';
|
|
27
|
+
import { TYPE_TO_DIRECTORY } from '../utils/index.js';
|
|
28
|
+
import { itemPaths, listItemFolders, typeDirectory } from './item-paths.js';
|
|
29
|
+
/**
|
|
30
|
+
* Descriptions retained in memory per store. Metadata is always retained; a
|
|
31
|
+
* description beyond this budget is read from disk on each call instead.
|
|
32
|
+
*/
|
|
33
|
+
export const DESCRIPTION_RETENTION_LIMIT = 64 * 1024 * 1024;
|
|
34
|
+
/** Thrown when a guarded write finds the file changed since it was read. */
|
|
35
|
+
export class StaleItemError extends Error {
|
|
36
|
+
itemId;
|
|
37
|
+
code = 'STALE_ITEM';
|
|
38
|
+
constructor(itemId) {
|
|
39
|
+
super(`${itemId} changed on disk since it was read — re-read the item and retry`);
|
|
40
|
+
this.itemId = itemId;
|
|
41
|
+
this.name = 'StaleItemError';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const stores = new Map();
|
|
45
|
+
let descriptionRetentionLimit = DESCRIPTION_RETENTION_LIMIT;
|
|
46
|
+
/** Test hook: lower the description budget without touching the constant. */
|
|
47
|
+
export function configureItemStore(options) {
|
|
48
|
+
descriptionRetentionLimit = options.descriptionRetentionBytes ?? DESCRIPTION_RETENTION_LIMIT;
|
|
49
|
+
}
|
|
50
|
+
function storeFor(devstepsDir) {
|
|
51
|
+
let store = stores.get(devstepsDir);
|
|
52
|
+
if (!store) {
|
|
53
|
+
store = { entries: new Map(), retainedDescriptionBytes: 0 };
|
|
54
|
+
stores.set(devstepsDir, store);
|
|
55
|
+
}
|
|
56
|
+
return store;
|
|
57
|
+
}
|
|
58
|
+
function stampOf(filePath) {
|
|
59
|
+
try {
|
|
60
|
+
const stat = statSync(filePath);
|
|
61
|
+
return { mtimeMs: stat.mtimeMs, size: stat.size };
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function sameStamp(a, b) {
|
|
68
|
+
if (a === null || b === null)
|
|
69
|
+
return a === b;
|
|
70
|
+
return a.mtimeMs === b.mtimeMs && a.size === b.size;
|
|
71
|
+
}
|
|
72
|
+
/** Give back the retention budget a cached description holds. */
|
|
73
|
+
function release(store, description) {
|
|
74
|
+
if (description && description.text !== null) {
|
|
75
|
+
store.retainedDescriptionBytes -= description.stamp?.size ?? 0;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function forget(store, id) {
|
|
79
|
+
const entry = store.entries.get(id);
|
|
80
|
+
if (!entry)
|
|
81
|
+
return;
|
|
82
|
+
release(store, entry.description);
|
|
83
|
+
store.entries.delete(id);
|
|
84
|
+
}
|
|
85
|
+
/** Every item ID on disk, discovered from the item folders — no index involved. */
|
|
86
|
+
export function listItemIds(devstepsDir, type) {
|
|
87
|
+
const types = type ? [type] : Object.keys(TYPE_TO_DIRECTORY);
|
|
88
|
+
const ids = [];
|
|
89
|
+
for (const itemType of types) {
|
|
90
|
+
ids.push(...listItemFolders(typeDirectory(devstepsDir, itemType), itemType));
|
|
91
|
+
}
|
|
92
|
+
return ids;
|
|
93
|
+
}
|
|
94
|
+
/** The item's store entry with current metadata; null when its metadata file does not exist. */
|
|
95
|
+
function readEntry(devstepsDir, id) {
|
|
96
|
+
const store = storeFor(devstepsDir);
|
|
97
|
+
const metadataStamp = stampOf(itemPaths(devstepsDir, id).metadata);
|
|
98
|
+
if (!metadataStamp) {
|
|
99
|
+
forget(store, id);
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const cached = store.entries.get(id);
|
|
103
|
+
if (cached && sameStamp(cached.metadataStamp, metadataStamp))
|
|
104
|
+
return cached;
|
|
105
|
+
const metadata = ItemMetadata.parse(JSON.parse(readFileSync(itemPaths(devstepsDir, id).metadata, 'utf-8')));
|
|
106
|
+
const entry = { metadata, metadataStamp, description: cached?.description };
|
|
107
|
+
store.entries.set(id, entry);
|
|
108
|
+
return entry;
|
|
109
|
+
}
|
|
110
|
+
/** The entry's description, re-read when its `<ID>.md` changed since it was cached. */
|
|
111
|
+
function readDescription(devstepsDir, id, entry) {
|
|
112
|
+
const file = itemPaths(devstepsDir, id).description;
|
|
113
|
+
const stamp = stampOf(file);
|
|
114
|
+
const cached = entry.description;
|
|
115
|
+
if (cached && sameStamp(cached.stamp, stamp)) {
|
|
116
|
+
return { text: cached.text ?? readFileSync(file, 'utf-8'), stamp };
|
|
117
|
+
}
|
|
118
|
+
const store = storeFor(devstepsDir);
|
|
119
|
+
const text = stamp ? readFileSync(file, 'utf-8') : '';
|
|
120
|
+
release(store, cached);
|
|
121
|
+
const size = stamp?.size ?? 0;
|
|
122
|
+
const retain = store.retainedDescriptionBytes + size <= descriptionRetentionLimit;
|
|
123
|
+
entry.description = { text: retain ? text : null, stamp };
|
|
124
|
+
if (retain)
|
|
125
|
+
store.retainedDescriptionBytes += size;
|
|
126
|
+
return { text, stamp };
|
|
127
|
+
}
|
|
128
|
+
/** Read one item through the store; null when its metadata file does not exist. */
|
|
129
|
+
function readStored(devstepsDir, id) {
|
|
130
|
+
const entry = readEntry(devstepsDir, id);
|
|
131
|
+
if (!entry)
|
|
132
|
+
return null;
|
|
133
|
+
const description = readDescription(devstepsDir, id, entry);
|
|
134
|
+
return {
|
|
135
|
+
metadata: entry.metadata,
|
|
136
|
+
description: description.text,
|
|
137
|
+
descriptionStamp: description.stamp,
|
|
138
|
+
stamp: entry.metadataStamp,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Read one item. Throws for an unknown ID, a missing file, or a schema violation —
|
|
143
|
+
* the strictness `getItem()` has always had. The metadata is a copy the caller may
|
|
144
|
+
* patch and write back through `writeItemMetadata`.
|
|
145
|
+
*/
|
|
146
|
+
export function readItem(devstepsDir, id) {
|
|
147
|
+
const stored = readStored(devstepsDir, id);
|
|
148
|
+
if (!stored) {
|
|
149
|
+
throw new Error(`Item not found: ${id}`);
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
metadata: structuredClone(stored.metadata),
|
|
153
|
+
description: stored.description,
|
|
154
|
+
descriptionStamp: stored.descriptionStamp,
|
|
155
|
+
stamp: stored.stamp,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/** Every current item ID of the store's scope; drops entries whose folder is gone. */
|
|
159
|
+
function currentIds(devstepsDir, type) {
|
|
160
|
+
const ids = listItemIds(devstepsDir, type);
|
|
161
|
+
if (!type) {
|
|
162
|
+
const store = storeFor(devstepsDir);
|
|
163
|
+
const onDisk = new Set(ids);
|
|
164
|
+
for (const id of [...store.entries.keys()]) {
|
|
165
|
+
if (!onDisk.has(id))
|
|
166
|
+
forget(store, id);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return ids;
|
|
170
|
+
}
|
|
171
|
+
function readAll(ids, read) {
|
|
172
|
+
const items = [];
|
|
173
|
+
const unreadable = [];
|
|
174
|
+
for (const id of ids) {
|
|
175
|
+
try {
|
|
176
|
+
const stored = read(id);
|
|
177
|
+
if (stored)
|
|
178
|
+
items.push(stored);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
unreadable.push(id);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return { items, unreadable };
|
|
185
|
+
}
|
|
186
|
+
/** `readItem` without the description: never opens the `<ID>.md`. Same errors, a copy too. */
|
|
187
|
+
export function readItemMetadata(devstepsDir, id) {
|
|
188
|
+
const entry = readEntry(devstepsDir, id);
|
|
189
|
+
if (!entry) {
|
|
190
|
+
throw new Error(`Item not found: ${id}`);
|
|
191
|
+
}
|
|
192
|
+
return { metadata: structuredClone(entry.metadata), stamp: entry.metadataStamp };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Read every item, or every item of one type. An entry the store still holds for
|
|
196
|
+
* an ID that is no longer on disk is dropped on the way.
|
|
197
|
+
*
|
|
198
|
+
* A folder without its `<ID>.json` is skipped, not reported: a parallel `add` has
|
|
199
|
+
* claimed it and not written yet (STORY-428). `doctor` names one that stays empty.
|
|
200
|
+
*/
|
|
201
|
+
export function readAllItems(devstepsDir, type) {
|
|
202
|
+
return readAll(currentIds(devstepsDir, type), (id) => readStored(devstepsDir, id));
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* `readAllItems` without descriptions: reads and validates only the `<ID>.json`
|
|
206
|
+
* files, so it never opens an `<ID>.md`. Same discovery, skipping, and reporting.
|
|
207
|
+
*/
|
|
208
|
+
export function readAllItemMetadata(devstepsDir, type) {
|
|
209
|
+
return readAll(currentIds(devstepsDir, type), (id) => {
|
|
210
|
+
const entry = readEntry(devstepsDir, id);
|
|
211
|
+
return entry && { metadata: entry.metadata, stamp: entry.metadataStamp };
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/** Throw `StaleItemError` when the item's metadata file no longer carries `expected`. */
|
|
215
|
+
export function assertItemUnchanged(devstepsDir, id, expected) {
|
|
216
|
+
if (!sameStamp(stampOf(itemPaths(devstepsDir, id).metadata), expected)) {
|
|
217
|
+
throw new StaleItemError(id);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/** Refuses with `StaleItemError` when the metadata or the `<ID>.md` changed since `expected`. */
|
|
221
|
+
export function assertItemStamps(devstepsDir, id, expected) {
|
|
222
|
+
assertItemUnchanged(devstepsDir, id, expected.metadata);
|
|
223
|
+
if (!sameStamp(stampOf(itemPaths(devstepsDir, id).description), expected.description)) {
|
|
224
|
+
throw new StaleItemError(id);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Write an item's metadata atomically (STORY-428). With `expected`, the write is
|
|
229
|
+
* refused when the file changed since that stamp was read — the caller re-reads
|
|
230
|
+
* and retries instead of overwriting another process's change.
|
|
231
|
+
*/
|
|
232
|
+
export function writeItemMetadata(devstepsDir, metadata, expected) {
|
|
233
|
+
if (expected)
|
|
234
|
+
assertItemUnchanged(devstepsDir, metadata.id, expected);
|
|
235
|
+
writeJsonAtomic(itemPaths(devstepsDir, metadata.id).metadata, metadata);
|
|
236
|
+
invalidateItem(devstepsDir, metadata.id);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Write an item's master document atomically. With `expected`, both the metadata and the
|
|
240
|
+
* `<ID>.md` stamp are checked immediately before the temp-file rename and the write is
|
|
241
|
+
* refused with `StaleItemError` when either changed; without it the write is blind.
|
|
242
|
+
*/
|
|
243
|
+
export function writeItemDescription(devstepsDir, id, description, expected) {
|
|
244
|
+
const file = itemPaths(devstepsDir, id).description;
|
|
245
|
+
try {
|
|
246
|
+
writeFileAtomic(file, description, expected ? { beforeRename: () => assertItemStamps(devstepsDir, id, expected) } : undefined);
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
invalidateItem(devstepsDir, id);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/** Drop one entry; writers call this after touching the item's files. */
|
|
253
|
+
export function invalidateItem(devstepsDir, id) {
|
|
254
|
+
const store = stores.get(devstepsDir);
|
|
255
|
+
if (store)
|
|
256
|
+
forget(store, id);
|
|
257
|
+
}
|
|
258
|
+
/** Drop a whole store — after a migration, or when a test wants a cold start. */
|
|
259
|
+
export function invalidateStore(devstepsDir) {
|
|
260
|
+
stores.delete(devstepsDir);
|
|
261
|
+
}
|
|
262
|
+
export function itemStoreStats(devstepsDir) {
|
|
263
|
+
const store = stores.get(devstepsDir);
|
|
264
|
+
return {
|
|
265
|
+
entries: store?.entries.size ?? 0,
|
|
266
|
+
retainedDescriptionBytes: store?.retainedDescriptionBytes ?? 0,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=item-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-store.js","sourceRoot":"","sources":["../../src/core/item-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2026 Thomas Hertel (the@devsteps.dev)
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* Creation respects the project's work-item vocabulary before any write (BUG-252).
|
|
6
|
+
*/
|
|
7
|
+
import { type DevStepsConfig } from '../schemas/index.js';
|
|
8
|
+
export declare function assertItemTypeOffered(config: DevStepsConfig, type: unknown): void;
|
|
9
|
+
//# sourceMappingURL=item-type-availability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-type-availability.d.ts","sourceRoot":"","sources":["../../src/core/item-type-availability.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,qBAAqB,CAAC;AAIjF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAmBjF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2026 Thomas Hertel (the@devsteps.dev)
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* Creation respects the project's work-item vocabulary before any write (BUG-252).
|
|
6
|
+
*/
|
|
7
|
+
import { ItemType, Methodology } from '../schemas/index.js';
|
|
8
|
+
import { getMethodologyConfig } from '../utils/index.js';
|
|
9
|
+
import { CROSS_CUTTING_TYPES } from './decision-question.js';
|
|
10
|
+
export function assertItemTypeOffered(config, type) {
|
|
11
|
+
const methodology = config.settings?.methodology ?? 'hybrid';
|
|
12
|
+
const parsed = Methodology.safeParse(methodology);
|
|
13
|
+
if (!parsed.success)
|
|
14
|
+
throw new Error(`Unknown project methodology: ${methodology}`);
|
|
15
|
+
const vocabulary = getMethodologyConfig(parsed.data).item_types;
|
|
16
|
+
const declared = config.settings?.item_types;
|
|
17
|
+
if (declared !== undefined && !Array.isArray(declared)) {
|
|
18
|
+
throw new Error('Project settings.item_types must be an array of item types.');
|
|
19
|
+
}
|
|
20
|
+
// Decisions, questions and documents predate their presence in some project configs.
|
|
21
|
+
const configured = new Set([...(declared ?? vocabulary), ...CROSS_CUTTING_TYPES]);
|
|
22
|
+
const allowed = vocabulary.filter((candidate) => configured.has(candidate));
|
|
23
|
+
const item = ItemType.safeParse(type);
|
|
24
|
+
if (!item.success || !allowed.includes(item.data)) {
|
|
25
|
+
throw new Error(`Item type ${JSON.stringify(type)} is not offered by methodology ${methodology}. ` +
|
|
26
|
+
`Allowed types: ${allowed.join(', ')}.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=item-type-availability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-type-availability.js","sourceRoot":"","sources":["../../src/core/item-type-availability.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAuB,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,qBAAqB,CAAC,MAAsB,EAAE,IAAa;IACzE,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,QAAQ,CAAC;IAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,qFAAqF;IACrF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kCAAkC,WAAW,IAAI;YAChF,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1C,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2026 Thomas Hertel (the@devsteps.dev)
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* Write-path guard for item metadata (BUG-115 / STORY-382)
|
|
6
|
+
* `getItem()` parses every item against `ItemMetadata` and throws on any violation.
|
|
7
|
+
* Until this guard existed, no write path checked the same contract, so a single
|
|
8
|
+
* `add` could persist an item that could never be read, updated, linked, archived
|
|
9
|
+
* or purged again. Every writer runs this before it touches the filesystem.
|
|
10
|
+
*/
|
|
11
|
+
import type { ZodError } from 'zod';
|
|
12
|
+
import { ItemMetadata } from '../schemas/index.js';
|
|
13
|
+
type ItemIssue = ZodError['issues'][number];
|
|
14
|
+
/** Field name → where the offending value came from, e.g. a config default. */
|
|
15
|
+
export type FieldOrigins = Readonly<Record<string, string>>;
|
|
16
|
+
/**
|
|
17
|
+
* Raised when metadata would be persisted in a shape the read path rejects.
|
|
18
|
+
* Carries the readable per-field lines so adapters can present them as they like.
|
|
19
|
+
*/
|
|
20
|
+
export declare class ItemValidationError extends Error {
|
|
21
|
+
readonly issues: readonly string[];
|
|
22
|
+
constructor(message: string, issues: readonly string[]);
|
|
23
|
+
}
|
|
24
|
+
/** One readable line per Zod issue, resolving each offending value from `input`. */
|
|
25
|
+
export declare function describeZodIssues(issues: readonly ItemIssue[], input: unknown, origins?: FieldOrigins): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Validate metadata about to be written and return the parsed value.
|
|
28
|
+
* Throws `ItemValidationError` with one readable line per violation instead of
|
|
29
|
+
* the raw Zod JSON, which is what reached the caller before this guard existed.
|
|
30
|
+
*/
|
|
31
|
+
export declare function assertValidItemMetadata(metadata: unknown, options?: {
|
|
32
|
+
readonly origins?: FieldOrigins;
|
|
33
|
+
}): ItemMetadata;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=item-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-validation.d.ts","sourceRoot":"","sources":["../../src/core/item-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5C,+EAA+E;AAC/E,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAIrD;CACF;AAgDD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,YAAiB,GACzB,MAAM,EAAE,CAEV;AAuBD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAO,GAChD,YAAY,CAYd"}
|