@iq-context/core 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/LICENSE +21 -0
  2. package/dist/capture.js +2 -1
  3. package/dist/capture.js.map +1 -1
  4. package/dist/config.d.ts +1 -0
  5. package/dist/config.js +10 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/discovery.d.ts +9 -0
  8. package/dist/discovery.js +25 -0
  9. package/dist/discovery.js.map +1 -1
  10. package/dist/doctor.js +140 -112
  11. package/dist/doctor.js.map +1 -1
  12. package/dist/find.js +2 -1
  13. package/dist/find.js.map +1 -1
  14. package/dist/git.d.ts +1 -0
  15. package/dist/git.js +15 -0
  16. package/dist/git.js.map +1 -0
  17. package/dist/go.js +6 -1
  18. package/dist/go.js.map +1 -1
  19. package/dist/headline.d.ts +13 -0
  20. package/dist/headline.js +32 -0
  21. package/dist/headline.js.map +1 -0
  22. package/dist/index.d.ts +14 -3
  23. package/dist/index.js +12 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/init.js +93 -51
  26. package/dist/init.js.map +1 -1
  27. package/dist/invariantSnapshot.d.ts +2 -0
  28. package/dist/invariantSnapshot.js +219 -0
  29. package/dist/invariantSnapshot.js.map +1 -0
  30. package/dist/invariantTypes.d.ts +100 -0
  31. package/dist/invariantTypes.js +4 -0
  32. package/dist/invariantTypes.js.map +1 -0
  33. package/dist/invariants.d.ts +13 -0
  34. package/dist/invariants.js +415 -0
  35. package/dist/invariants.js.map +1 -0
  36. package/dist/listMutation.d.ts +4 -0
  37. package/dist/listMutation.js +37 -0
  38. package/dist/listMutation.js.map +1 -0
  39. package/dist/obligations.d.ts +3 -0
  40. package/dist/obligations.js +84 -0
  41. package/dist/obligations.js.map +1 -0
  42. package/dist/persistence.js +7 -4
  43. package/dist/persistence.js.map +1 -1
  44. package/dist/save.js +34 -34
  45. package/dist/save.js.map +1 -1
  46. package/dist/staleness.d.ts +2 -2
  47. package/dist/staleness.js +12 -89
  48. package/dist/staleness.js.map +1 -1
  49. package/dist/state.d.ts +6 -1
  50. package/dist/state.js +63 -23
  51. package/dist/state.js.map +1 -1
  52. package/dist/stateSchemas.d.ts +16 -0
  53. package/dist/stateSchemas.js +212 -0
  54. package/dist/stateSchemas.js.map +1 -0
  55. package/dist/status.js +1 -1
  56. package/dist/status.js.map +1 -1
  57. package/dist/trackedPath.d.ts +3 -0
  58. package/dist/trackedPath.js +27 -0
  59. package/dist/trackedPath.js.map +1 -0
  60. package/dist/types.d.ts +33 -18
  61. package/dist/workstream.js +3 -8
  62. package/dist/workstream.js.map +1 -1
  63. package/dist/workstreamId.d.ts +2 -0
  64. package/dist/workstreamId.js +67 -0
  65. package/dist/workstreamId.js.map +1 -0
  66. package/dist/wrap.js +100 -46
  67. package/dist/wrap.js.map +1 -1
  68. package/package.json +12 -2
package/dist/save.js CHANGED
@@ -1,61 +1,61 @@
1
1
  import { loadResumeState, loadWorkstreamState, resolveProjectRoot, resolveTargetWorkstream, updateFocusAfterSave, writeResumeState, writeWorkstreamState, } from "./state.js";
2
+ import { detectGitBranch } from "./git.js";
3
+ import { deriveHeadlines } from "./headline.js";
4
+ import { appendList, replaceList } from "./listMutation.js";
5
+ import { normalizeTrackedPath } from "./trackedPath.js";
2
6
  export function saveProgress(options) {
3
7
  const projectRoot = resolveProjectRoot(options.startDir, options.projectRoot);
4
8
  const workstreamId = resolveTargetWorkstream(projectRoot, options.workstreamId);
5
9
  const currentWorkstreamState = loadWorkstreamState(projectRoot, workstreamId);
6
10
  const currentResumeState = loadResumeState(projectRoot, workstreamId);
7
11
  const timestamp = new Date().toISOString();
12
+ const clearFields = new Set(options.clearFields);
13
+ const delta = {
14
+ files: replaceList(currentWorkstreamState.active_files, options.files, clearFields.has("files"), (value) => normalizeTrackedPath(projectRoot, value)),
15
+ artifacts: replaceList(currentWorkstreamState.active_artifacts, options.artifacts, clearFields.has("artifacts"), (value) => normalizeTrackedPath(projectRoot, value)),
16
+ blockers: appendList(currentWorkstreamState.blockers, options.blockers, clearFields.has("blockers")),
17
+ questions: appendList(currentWorkstreamState.open_questions, options.questions, clearFields.has("questions")),
18
+ next: appendList(currentWorkstreamState.next_actions, options.nextActions, clearFields.has("next")),
19
+ };
20
+ const headlines = deriveHeadlines({
21
+ complete: false,
22
+ nextActions: delta.next.current,
23
+ summary: options.summary,
24
+ previousContinuationHint: currentWorkstreamState.continuation_hint,
25
+ previousResumeFrom: currentResumeState.resume_from,
26
+ preservePrevious: !clearFields.has("next"),
27
+ });
8
28
  const nextWorkstreamState = {
9
29
  ...currentWorkstreamState,
10
30
  mode: options.mode ?? currentWorkstreamState.mode,
11
31
  status_summary: options.summary ?? currentWorkstreamState.status_summary,
12
- active_files: options.files.length > 0 ? uniqueValues(options.files) : currentWorkstreamState.active_files,
13
- active_artifacts: options.artifacts.length > 0
14
- ? uniqueValues(options.artifacts)
15
- : currentWorkstreamState.active_artifacts,
16
- blockers: options.blockers.length > 0 ? uniqueValues(options.blockers) : currentWorkstreamState.blockers,
17
- open_questions: options.questions.length > 0 ? uniqueValues(options.questions) : currentWorkstreamState.open_questions,
18
- next_actions: options.nextActions.length > 0 ? uniqueValues(options.nextActions) : currentWorkstreamState.next_actions,
19
- continuation_hint: buildContinuationHint(options, currentWorkstreamState),
32
+ active_files: delta.files.current,
33
+ active_artifacts: delta.artifacts.current,
34
+ blockers: delta.blockers.current,
35
+ open_questions: delta.questions.current,
36
+ next_actions: delta.next.current,
37
+ continuation_hint: headlines.continuationHint,
38
+ branch: detectGitBranch(projectRoot) ?? currentWorkstreamState.branch,
20
39
  last_saved_at: timestamp,
21
40
  updated_at: timestamp,
22
41
  };
23
42
  const nextResumeState = {
24
43
  ...currentResumeState,
25
- remaining_tasks: options.nextActions.length > 0
26
- ? uniqueValues(options.nextActions)
27
- : currentResumeState.remaining_tasks,
28
- resume_from: buildResumeFrom(options, nextWorkstreamState, currentResumeState),
44
+ remaining_tasks: nextWorkstreamState.next_actions,
45
+ resume_from: headlines.resumeFrom,
29
46
  updated_at: timestamp,
30
47
  };
31
- writeWorkstreamState(projectRoot, nextWorkstreamState);
48
+ // Resume state first: if the process dies between these writes, the surviving
49
+ // divergence is a populated remaining_tasks beside stale next_actions, which
50
+ // re-running the same command repairs. The reverse order strands the opposite.
32
51
  writeResumeState(projectRoot, workstreamId, nextResumeState);
52
+ writeWorkstreamState(projectRoot, nextWorkstreamState);
33
53
  updateFocusAfterSave(projectRoot, nextWorkstreamState, nextResumeState);
34
54
  return {
35
55
  projectRoot,
36
56
  workstreamState: nextWorkstreamState,
37
57
  resumeState: nextResumeState,
58
+ delta,
38
59
  };
39
60
  }
40
- function buildContinuationHint(options, currentWorkstreamState) {
41
- if (options.nextActions.length > 0) {
42
- return `Next: ${options.nextActions[0]}`;
43
- }
44
- if (options.summary) {
45
- return options.summary;
46
- }
47
- return currentWorkstreamState.continuation_hint;
48
- }
49
- function buildResumeFrom(options, workstreamState, currentResumeState) {
50
- if (options.nextActions.length > 0) {
51
- return `Resume with: ${options.nextActions[0]}`;
52
- }
53
- if (options.summary) {
54
- return options.summary;
55
- }
56
- return currentResumeState.resume_from || workstreamState.continuation_hint;
57
- }
58
- function uniqueValues(values) {
59
- return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
60
- }
61
61
  //# sourceMappingURL=save.js.map
package/dist/save.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"save.js","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAChF,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GAAG,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,KAAK,GAAe;QACxB,KAAK,EAAE,WAAW,CAChB,sBAAsB,CAAC,YAAY,EACnC,OAAO,CAAC,KAAK,EACb,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EACxB,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,CAAC,CACpD;QACD,SAAS,EAAE,WAAW,CACpB,sBAAsB,CAAC,gBAAgB,EACvC,OAAO,CAAC,SAAS,EACjB,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAC5B,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,CAAC,CACpD;QACD,QAAQ,EAAE,UAAU,CAClB,sBAAsB,CAAC,QAAQ,EAC/B,OAAO,CAAC,QAAQ,EAChB,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAC5B;QACD,SAAS,EAAE,UAAU,CACnB,sBAAsB,CAAC,cAAc,EACrC,OAAO,CAAC,SAAS,EACjB,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAC7B;QACD,IAAI,EAAE,UAAU,CACd,sBAAsB,CAAC,YAAY,EACnC,OAAO,CAAC,WAAW,EACnB,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CACxB;KACF,CAAC;IACF,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;QAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,wBAAwB,EAAE,sBAAsB,CAAC,iBAAiB;QAClE,kBAAkB,EAAE,kBAAkB,CAAC,WAAW;QAClD,gBAAgB,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;KAC3C,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAoB;QAC3C,GAAG,sBAAsB;QACzB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,sBAAsB,CAAC,IAAI;QACjD,cAAc,EAAE,OAAO,CAAC,OAAO,IAAI,sBAAsB,CAAC,cAAc;QACxE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;QACjC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO;QACzC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;QAChC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO;QACvC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;QAChC,iBAAiB,EAAE,SAAS,CAAC,gBAAgB;QAC7C,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,sBAAsB,CAAC,MAAM;QACrE,aAAa,EAAE,SAAS;QACxB,UAAU,EAAE,SAAS;KACtB,CAAC;IAEF,MAAM,eAAe,GAAgB;QACnC,GAAG,kBAAkB;QACrB,eAAe,EAAE,mBAAmB,CAAC,YAAY;QACjD,WAAW,EAAE,SAAS,CAAC,UAAU;QACjC,UAAU,EAAE,SAAS;KACtB,CAAC;IAEF,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E;IAC/E,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IAC7D,oBAAoB,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IACvD,oBAAoB,CAAC,WAAW,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAExE,OAAO;QACL,WAAW;QACX,eAAe,EAAE,mBAAmB;QACpC,WAAW,EAAE,eAAe;QAC5B,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import type { ResolvedTrackedArtifact } from "./trackedArtifacts.js";
2
- import type { FocusState, ProjectState, ResumeState, StalenessReport, WorkstreamState } from "./types.js";
2
+ import type { FocusState, ProjectState, StalenessReport, WorkstreamState } from "./types.js";
3
3
  export interface RefreshStalenessResult {
4
4
  projectState: ProjectState;
5
5
  focusState: FocusState;
6
6
  staleness: StalenessReport;
7
7
  }
8
8
  export declare function refreshStaleness(projectRoot: string, workstreamId: string, configuredArtifacts?: ResolvedTrackedArtifact[]): RefreshStalenessResult;
9
- export declare function evaluateStaleness(projectRoot: string, workstreamState: WorkstreamState, resumeState: ResumeState, configuredArtifacts?: ResolvedTrackedArtifact[]): StalenessReport;
9
+ export declare function evaluateStaleness(projectRoot: string, workstreamState: WorkstreamState, configuredArtifacts?: ResolvedTrackedArtifact[]): StalenessReport;
package/dist/staleness.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import fs from "node:fs";
2
- import path from "node:path";
3
- import { execFileSync } from "node:child_process";
2
+ import { detectGitBranch } from "./git.js";
4
3
  import { loadFocusState, loadProjectState, loadResumeState, loadWorkstreamState, writeFocusState, } from "./state.js";
5
4
  import { loadProjectConfig } from "./config.js";
6
5
  import { resolveTrackedArtifacts } from "./trackedArtifacts.js";
6
+ import { isTrackedPathOutsideProject, resolveTrackedPath } from "./trackedPath.js";
7
7
  const CHANGE_GRACE_MS = 1000;
8
8
  const NON_STALE_LIFECYCLE_STATUSES = new Set(["completed", "abandoned"]);
9
9
  export function refreshStaleness(projectRoot, workstreamId, configuredArtifacts) {
@@ -11,7 +11,7 @@ export function refreshStaleness(projectRoot, workstreamId, configuredArtifacts)
11
11
  const focusState = loadFocusState(projectRoot);
12
12
  const workstreamState = loadWorkstreamState(projectRoot, workstreamId);
13
13
  const resumeState = loadResumeState(projectRoot, workstreamId);
14
- const staleness = evaluateStaleness(projectRoot, workstreamState, resumeState, configuredArtifacts);
14
+ const staleness = evaluateStaleness(projectRoot, workstreamState, configuredArtifacts);
15
15
  const timestamp = new Date().toISOString();
16
16
  const nextFocusState = {
17
17
  ...focusState,
@@ -30,7 +30,7 @@ export function refreshStaleness(projectRoot, workstreamId, configuredArtifacts)
30
30
  staleness,
31
31
  };
32
32
  }
33
- export function evaluateStaleness(projectRoot, workstreamState, resumeState, configuredArtifacts) {
33
+ export function evaluateStaleness(projectRoot, workstreamState, configuredArtifacts) {
34
34
  if (NON_STALE_LIFECYCLE_STATUSES.has(workstreamState.lifecycle_status)) {
35
35
  return {
36
36
  level: "fresh",
@@ -43,20 +43,18 @@ export function evaluateStaleness(projectRoot, workstreamState, resumeState, con
43
43
  const changedWarnings = findChangedTrackedPaths(projectRoot, workstreamState);
44
44
  const trackedArtifactWarnings = findChangedConfiguredArtifacts(projectRoot, workstreamState, new Set(changedWarnings.flatMap((warning) => warning.path ? [warning.path] : [])), configuredArtifacts);
45
45
  const mismatchWarnings = findMismatchWarnings(projectRoot, workstreamState);
46
- const resumeWarnings = findStaleResumeWarnings(workstreamState, resumeState);
47
46
  const warningDetails = [
48
47
  ...missingWarnings,
49
48
  ...changedWarnings,
50
49
  ...trackedArtifactWarnings,
51
50
  ...mismatchWarnings,
52
- ...resumeWarnings,
53
51
  ];
54
52
  const warnings = warningDetails
55
53
  .filter((warning) => warning.reason !== "mismatch")
56
54
  .map((warning) => warning.message);
57
55
  const mismatchFlags = mismatchWarnings.map((warning) => warning.message);
58
56
  return {
59
- level: missingWarnings.length > 0 || mismatchWarnings.length > 0 || resumeWarnings.length > 0
57
+ level: missingWarnings.length > 0 || mismatchWarnings.length > 0
60
58
  ? "stale"
61
59
  : changedWarnings.length > 0 || trackedArtifactWarnings.length > 0
62
60
  ? "warning"
@@ -105,75 +103,16 @@ function findChangedConfiguredArtifacts(projectRoot, workstreamState, workstream
105
103
  }
106
104
  });
107
105
  }
108
- function findStaleResumeWarnings(workstreamState, resumeState) {
109
- const warnings = [];
110
- const completedTasks = new Set(resumeState.completed_tasks.map(normalizeComparableText));
111
- const completedWaves = new Set(resumeState.completed_waves.map(normalizeComparableText));
112
- for (const remainingTask of resumeState.remaining_tasks) {
113
- if (completedTasks.has(normalizeComparableText(remainingTask))) {
114
- warnings.push({
115
- message: `Resume state still lists a completed task as remaining: ${remainingTask}`,
116
- scope: "workstream",
117
- sourceKind: "resume_state",
118
- reason: "superseded",
119
- });
120
- }
121
- }
122
- if (resumeState.next_wave && completedWaves.has(normalizeComparableText(resumeState.next_wave))) {
123
- warnings.push({
124
- message: `Resume state still points at a completed wave: ${resumeState.next_wave}`,
125
- scope: "workstream",
126
- sourceKind: "resume_state",
127
- reason: "superseded",
128
- });
129
- }
130
- const completedTaskInResumeText = resumeState.completed_tasks.find((task) => {
131
- const normalizedTask = normalizeComparableText(task);
132
- return normalizedTask.length > 0 && normalizeComparableText(resumeState.resume_from).includes(normalizedTask);
133
- });
134
- if (completedTaskInResumeText) {
135
- warnings.push({
136
- message: `Continuation text still points at a completed task: ${completedTaskInResumeText}`,
137
- scope: "workstream",
138
- sourceKind: "continuation",
139
- reason: "superseded",
140
- });
141
- }
142
- const completedTaskInWorkstreamHint = resumeState.completed_tasks.find((task) => {
143
- const normalizedTask = normalizeComparableText(task);
144
- return normalizedTask.length > 0 && normalizeComparableText(workstreamState.continuation_hint).includes(normalizedTask);
145
- });
146
- // Avoid duplicate continuation warnings when resume_from and continuation_hint mirror the same stale task.
147
- if (completedTaskInWorkstreamHint && completedTaskInWorkstreamHint !== completedTaskInResumeText) {
148
- warnings.push({
149
- message: `Workstream continuation still points at a completed task: ${completedTaskInWorkstreamHint}`,
150
- scope: "workstream",
151
- sourceKind: "continuation",
152
- reason: "superseded",
153
- });
154
- }
155
- return dedupeWarnings(warnings);
156
- }
157
- function normalizeComparableText(value) {
158
- return value.trim().toLowerCase().replace(/\s+/g, " ");
159
- }
160
- function dedupeWarnings(warnings) {
161
- const seen = new Set();
162
- return warnings.filter((warning) => {
163
- const key = `${warning.scope}:${warning.sourceKind}:${warning.reason}:${warning.message}`;
164
- if (seen.has(key)) {
165
- return false;
166
- }
167
- seen.add(key);
168
- return true;
169
- });
170
- }
171
106
  function findMissingTrackedPaths(projectRoot, workstreamState) {
172
107
  const warnings = [];
173
108
  for (const reference of trackedPathReferences(workstreamState)) {
174
- if (!fs.existsSync(path.join(projectRoot, reference.filePath))) {
109
+ const absolutePath = resolveTrackedPath(projectRoot, reference.filePath);
110
+ if (!fs.existsSync(absolutePath)) {
111
+ const outsideProject = isTrackedPathOutsideProject(projectRoot, reference.filePath);
175
112
  warnings.push({
176
- message: `${reference.label} is missing: ${reference.filePath}`,
113
+ message: outsideProject
114
+ ? `Tracked outside the project root; not found on this host: ${reference.filePath}`
115
+ : `${reference.label} is missing: ${reference.filePath}`,
177
116
  scope: "workstream",
178
117
  sourceKind: reference.sourceKind,
179
118
  reason: "missing",
@@ -190,7 +129,7 @@ function findChangedTrackedPaths(projectRoot, workstreamState) {
190
129
  }
191
130
  const warnings = [];
192
131
  for (const reference of trackedPathReferences(workstreamState)) {
193
- const absolutePath = path.join(projectRoot, reference.filePath);
132
+ const absolutePath = resolveTrackedPath(projectRoot, reference.filePath);
194
133
  if (!fs.existsSync(absolutePath)) {
195
134
  continue;
196
135
  }
@@ -221,9 +160,6 @@ function findMismatchWarnings(projectRoot, workstreamState) {
221
160
  }
222
161
  function trackedPathReferences(workstreamState) {
223
162
  const references = [];
224
- if (workstreamState.active_plan) {
225
- references.push({ label: "Active plan", sourceKind: "active_plan", filePath: workstreamState.active_plan });
226
- }
227
163
  for (const filePath of workstreamState.active_files) {
228
164
  references.push({ label: "Active file", sourceKind: "active_file", filePath });
229
165
  }
@@ -256,17 +192,4 @@ function uniqueReferences(references) {
256
192
  return true;
257
193
  });
258
194
  }
259
- function detectGitBranch(projectRoot) {
260
- try {
261
- const branch = execFileSync("git", ["branch", "--show-current"], {
262
- cwd: projectRoot,
263
- encoding: "utf8",
264
- stdio: ["ignore", "pipe", "ignore"],
265
- }).trim();
266
- return branch.length > 0 ? branch : null;
267
- }
268
- catch {
269
- return null;
270
- }
271
- }
272
195
  //# sourceMappingURL=staleness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"staleness.js","sourceRoot":"","sources":["../src/staleness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"staleness.js","sourceRoot":"","sources":["../src/staleness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAUnF,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAQzE,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,YAAoB,EACpB,mBAA+C;IAE/C,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,iBAAiB,CAAC,WAAW,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,cAAc,GAAG;QACrB,GAAG,UAAU;QACb,KAAK,EAAE,SAAS,CAAC,KAAK,KAAK,OAAO;QAClC,cAAc,EAAE,SAAS,CAAC,aAAa;QACvC,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,eAAe,CAAC,iBAAiB,IAAI,UAAU,CAAC,WAAW;QACnG,UAAU,EAAE,CACV,UAAU,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC;eAC/C,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/E;YACC,CAAC,CAAC,UAAU,CAAC,UAAU;YACvB,CAAC,CAAC,SAAS;KACd,CAAC;IAEF,eAAe,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAE7C,OAAO;QACL,YAAY;QACZ,UAAU,EAAE,cAAc;QAC1B,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,eAAgC,EAChC,mBAA+C;IAE/C,IAAI,4BAA4B,CAAC,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvE,OAAO;YACL,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,uBAAuB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,uBAAuB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC9E,MAAM,uBAAuB,GAAG,8BAA8B,CAC5D,WAAW,EACX,eAAe,EACf,IAAI,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACjF,mBAAmB,CACpB,CAAC;IACF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG;QACrB,GAAG,eAAe;QAClB,GAAG,eAAe;QAClB,GAAG,uBAAuB;QAC1B,GAAG,gBAAgB;KACpB,CAAC;IACF,MAAM,QAAQ,GAAG,cAAc;SAC5B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC;SAClD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzE,OAAO;QACL,KAAK,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAC9D,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC;gBAChE,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO;QACb,QAAQ;QACR,cAAc;QACd,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,WAAmB,EACnB,eAAgC,EAChC,sBAAmC,EACnC,mBAA+C;IAE/C,MAAM,cAAc,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,SAAS,GAAG,mBAAmB,CAAC;IACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,iBAAiB,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,gFAAgF;YAChF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,SAAS,GAAG,uBAAuB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAsB,EAAE;QACxD,IAAI,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;gBAC7F,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,CAAC;oBACN,OAAO,EAAE,uDAAuD,QAAQ,CAAC,YAAY,EAAE;oBACvF,KAAK,EAAE,SAAkB;oBACzB,UAAU,EAAE,kBAA2B;oBACvC,MAAM,EAAE,0BAAmC;oBAC3C,IAAI,EAAE,QAAQ,CAAC,YAAY;iBAC5B,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,0FAA0F;YAC1F,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAmB,EAAE,eAAgC;IACpF,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/D,MAAM,YAAY,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,cAAc,GAAG,2BAA2B,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpF,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,cAAc;oBACrB,CAAC,CAAC,6DAA6D,SAAS,CAAC,QAAQ,EAAE;oBACnF,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,gBAAgB,SAAS,CAAC,QAAQ,EAAE;gBAC1D,KAAK,EAAE,YAAY;gBACnB,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,SAAS,CAAC,QAAQ;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAmB,EAAE,eAAgC;IACpF,MAAM,cAAc,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/D,MAAM,YAAY,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;YACjF,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,GAAG,SAAS,CAAC,KAAK,uCAAuC,SAAS,CAAC,QAAQ,EAAE;gBACtF,KAAK,EAAE,YAAY;gBACnB,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,MAAM,EAAE,0BAA0B;gBAClC,IAAI,EAAE,SAAS,CAAC,QAAQ;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB,EAAE,eAAgC;IACjF,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,aAAa,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;QAC1F,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC;YACN,OAAO,EAAE,mBAAmB,aAAa,qCAAqC,eAAe,CAAC,MAAM,IAAI;YACxG,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAC5B,eAAgC;IAEhC,MAAM,UAAU,GAA2F,EAAE,CAAC;IAE9G,KAAK,MAAM,QAAQ,IAAI,eAAe,CAAC,YAAY,EAAE,CAAC;QACpD,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,eAAe,CAAC,gBAAgB,EAAE,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,oBAAoB,CAAC,eAAgC;IAC5D,MAAM,UAAU,GAAG;QACjB,eAAe,CAAC,aAAa;QAC7B,eAAe,CAAC,eAAe;KAChC;SACE,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAClD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAErD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,gBAAgB,CACvB,UAAkG;IAElG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/state.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import type { FocusState, ProjectPaths, ProjectState, ResumeState, WorkstreamState } from "./types.js";
2
+ interface ResolveTargetWorkstreamOptions {
3
+ allowClosedFocusFallback?: boolean;
4
+ }
2
5
  export declare function resolveProjectRoot(startDir: string, explicitProjectRoot?: string): string;
3
6
  export declare function getProjectPaths(projectRoot: string): ProjectPaths;
4
7
  export declare function loadProjectState(projectRoot: string): ProjectState;
@@ -11,8 +14,10 @@ export declare function writeFocusState(projectRoot: string, focusState: FocusSt
11
14
  export declare function writeWorkstreamState(projectRoot: string, workstreamState: WorkstreamState): void;
12
15
  export declare function writeResumeState(projectRoot: string, workstreamId: string, resumeState: ResumeState): void;
13
16
  export declare function writeCurrentWorkstreamPointer(projectRoot: string, workstreamId: string): void;
14
- export declare function resolveTargetWorkstream(projectRoot: string, explicitWorkstreamId?: string): string;
17
+ export declare function resolveTargetWorkstream(projectRoot: string, explicitWorkstreamId?: string, options?: ResolveTargetWorkstreamOptions): string;
15
18
  export declare function updateFocusAfterGo(projectRoot: string, workstreamState: WorkstreamState, resumeState: ResumeState): void;
16
19
  export declare function updateFocusAfterSave(projectRoot: string, workstreamState: WorkstreamState, resumeState: ResumeState): void;
17
20
  export declare function updateFocusAfterWrap(projectRoot: string, workstreamState: WorkstreamState, resumeState: ResumeState): void;
18
21
  export declare function switchFocusToWorkstream(projectRoot: string, workstreamState: WorkstreamState, resumeState: ResumeState): void;
22
+ export declare function loadCurrentWorkstreamPointer(pointerPath: string): string | null;
23
+ export {};
package/dist/state.js CHANGED
@@ -2,7 +2,10 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { discoverProjectRoot } from "./discovery.js";
4
4
  import { writeJsonFileAtomic, writeTextFileAtomic } from "./persistence.js";
5
+ import { parseFocusState, parseProjectState, parseResumeState, parseWorkstreamState, } from "./stateSchemas.js";
6
+ import { resolveWorkstreamPath, validateWorkstreamId } from "./workstreamId.js";
5
7
  const LIVE_WORKSTREAM_STATUSES = new Set(["active", "paused", "blocked"]);
8
+ const CLOSED_WORKSTREAM_STATUSES = new Set(["completed", "abandoned"]);
6
9
  export function resolveProjectRoot(startDir, explicitProjectRoot) {
7
10
  const projectRoot = explicitProjectRoot
8
11
  ? path.resolve(explicitProjectRoot)
@@ -28,15 +31,23 @@ export function getProjectPaths(projectRoot) {
28
31
  }
29
32
  export function loadProjectState(projectRoot) {
30
33
  const paths = getProjectPaths(projectRoot);
31
- return readJsonFile(paths.projectStatePath);
34
+ const projectState = parseProjectState(readJsonFile(paths.projectStatePath), paths.projectStatePath);
35
+ projectState.workstreams.forEach((workstreamId) => {
36
+ validateWorkstreamId(workstreamId, `persisted workstream id in ${paths.projectStatePath}`);
37
+ });
38
+ return projectState;
32
39
  }
33
40
  export function writeProjectState(projectRoot, projectState) {
34
41
  const paths = getProjectPaths(projectRoot);
35
- writeJsonFile(paths.projectStatePath, projectState);
42
+ const validatedState = parseProjectState(projectState, paths.projectStatePath);
43
+ validatedState.workstreams.forEach((workstreamId) => validateWorkstreamId(workstreamId));
44
+ writeJsonFile(paths.projectStatePath, validatedState);
36
45
  }
37
46
  export function loadFocusState(projectRoot) {
38
47
  const paths = getProjectPaths(projectRoot);
39
- return readJsonFile(paths.focusStatePath);
48
+ const focusState = parseFocusState(readJsonFile(paths.focusStatePath), paths.focusStatePath);
49
+ validateWorkstreamId(focusState.current_workstream_id, `current_workstream_id in ${paths.focusStatePath}`);
50
+ return focusState;
40
51
  }
41
52
  export function listWorkstreamIds(projectRoot) {
42
53
  const paths = getProjectPaths(projectRoot);
@@ -45,40 +56,52 @@ export function listWorkstreamIds(projectRoot) {
45
56
  }
46
57
  return fs.readdirSync(paths.workstreamsDir, { withFileTypes: true })
47
58
  .filter((entry) => entry.isDirectory())
48
- .map((entry) => entry.name)
59
+ .map((entry) => validateWorkstreamId(entry.name, "persisted workstream directory name"))
49
60
  .sort();
50
61
  }
51
62
  export function loadWorkstreamState(projectRoot, workstreamId) {
52
- return readJsonFile(path.join(projectRoot, ".iq-context", "workstreams", workstreamId, "state.json"));
63
+ const statePath = resolveWorkstreamPath(projectRoot, workstreamId, "state.json");
64
+ const workstreamState = parseWorkstreamState(readJsonFile(statePath), statePath);
65
+ const persistedId = validateWorkstreamId(workstreamState.workstream_id, `workstream_id in ${statePath}`);
66
+ if (persistedId !== workstreamId) {
67
+ throw new Error(`Workstream ID mismatch in ${statePath}: expected ${workstreamId}, found ${persistedId}.`);
68
+ }
69
+ return workstreamState;
53
70
  }
54
71
  export function loadResumeState(projectRoot, workstreamId) {
55
- return readJsonFile(path.join(projectRoot, ".iq-context", "workstreams", workstreamId, "resume-state.json"));
72
+ const statePath = resolveWorkstreamPath(projectRoot, workstreamId, "resume-state.json");
73
+ return parseResumeState(readJsonFile(statePath), statePath);
56
74
  }
57
75
  export function writeFocusState(projectRoot, focusState) {
58
76
  const paths = getProjectPaths(projectRoot);
59
- writeJsonFile(paths.focusStatePath, focusState);
77
+ const validatedState = parseFocusState(focusState, paths.focusStatePath);
78
+ validateWorkstreamId(validatedState.current_workstream_id);
79
+ writeJsonFile(paths.focusStatePath, validatedState);
60
80
  }
61
81
  export function writeWorkstreamState(projectRoot, workstreamState) {
62
- writeJsonFile(path.join(projectRoot, ".iq-context", "workstreams", workstreamState.workstream_id, "state.json"), workstreamState);
82
+ const statePath = resolveWorkstreamPath(projectRoot, workstreamState.workstream_id, "state.json");
83
+ writeJsonFile(statePath, parseWorkstreamState(workstreamState, statePath));
63
84
  }
64
85
  export function writeResumeState(projectRoot, workstreamId, resumeState) {
65
- writeJsonFile(path.join(projectRoot, ".iq-context", "workstreams", workstreamId, "resume-state.json"), resumeState);
86
+ const statePath = resolveWorkstreamPath(projectRoot, workstreamId, "resume-state.json");
87
+ writeJsonFile(statePath, parseResumeState(resumeState, statePath));
66
88
  }
67
89
  export function writeCurrentWorkstreamPointer(projectRoot, workstreamId) {
68
90
  const paths = getProjectPaths(projectRoot);
69
- writeTextFileAtomic(paths.currentWorkstreamPath, `${workstreamId}\n`);
91
+ writeTextFileAtomic(paths.currentWorkstreamPath, `${validateWorkstreamId(workstreamId)}\n`);
70
92
  }
71
- export function resolveTargetWorkstream(projectRoot, explicitWorkstreamId) {
93
+ export function resolveTargetWorkstream(projectRoot, explicitWorkstreamId, options = {}) {
72
94
  const paths = getProjectPaths(projectRoot);
73
95
  if (explicitWorkstreamId) {
74
- ensureWorkstreamExists(projectRoot, explicitWorkstreamId);
75
- return explicitWorkstreamId;
96
+ const validatedId = validateWorkstreamId(explicitWorkstreamId, "--workstream value");
97
+ ensureWorkstreamExists(projectRoot, validatedId);
98
+ return validatedId;
76
99
  }
77
100
  const focusState = loadFocusState(projectRoot);
78
101
  if (focusState.current_workstream_id && isLiveWorkstream(projectRoot, focusState.current_workstream_id)) {
79
102
  return focusState.current_workstream_id;
80
103
  }
81
- const currentPointer = readCurrentWorkstreamPointer(paths.currentWorkstreamPath);
104
+ const currentPointer = loadCurrentWorkstreamPointer(paths.currentWorkstreamPath);
82
105
  if (currentPointer && isLiveWorkstream(projectRoot, currentPointer)) {
83
106
  return currentPointer;
84
107
  }
@@ -90,6 +113,14 @@ export function resolveTargetWorkstream(projectRoot, explicitWorkstreamId) {
90
113
  if (liveWorkstreams.length > 1) {
91
114
  throw new Error(`Multiple live workstreams found (${liveWorkstreams.join(", ")}). Re-run with --workstream <id>.`);
92
115
  }
116
+ if (options.allowClosedFocusFallback) {
117
+ if (isClosedWorkstream(projectRoot, focusState.current_workstream_id)) {
118
+ return focusState.current_workstream_id;
119
+ }
120
+ if (currentPointer && isClosedWorkstream(projectRoot, currentPointer)) {
121
+ return currentPointer;
122
+ }
123
+ }
93
124
  const workstreamIds = listWorkstreamIds(projectRoot);
94
125
  if (workstreamIds.length > 0) {
95
126
  throw new Error("No live workstreams found. Reopen an existing workstream with iq-context workstream reopen <id> or create one with iq-context workstream new <id>.");
@@ -120,7 +151,7 @@ export function switchFocusToWorkstream(projectRoot, workstreamState, resumeStat
120
151
  writeFocusState(projectRoot, {
121
152
  ...focusState,
122
153
  current_workstream_id: workstreamState.workstream_id,
123
- current_environment_id: workstreamState.environment_id ?? focusState.current_environment_id,
154
+ current_environment_id: focusState.current_environment_id,
124
155
  current_branch: workstreamState.branch ?? focusState.current_branch,
125
156
  resume_from: resumeState.resume_from || workstreamState.continuation_hint || focusState.resume_from,
126
157
  last_command: "workstream switch",
@@ -132,7 +163,7 @@ function buildNextFocusState(focusState, workstreamState, resumeState, lastComma
132
163
  return {
133
164
  ...focusState,
134
165
  current_workstream_id: workstreamState.workstream_id,
135
- current_environment_id: workstreamState.environment_id ?? focusState.current_environment_id,
166
+ current_environment_id: focusState.current_environment_id,
136
167
  current_branch: workstreamState.branch ?? focusState.current_branch,
137
168
  resume_from: resumeState.resume_from || workstreamState.continuation_hint || focusState.resume_from,
138
169
  last_command: lastCommand,
@@ -143,26 +174,35 @@ function buildNextFocusState(focusState, workstreamState, resumeState, lastComma
143
174
  };
144
175
  }
145
176
  function ensureWorkstreamExists(projectRoot, workstreamId) {
146
- const statePath = path.join(projectRoot, ".iq-context", "workstreams", workstreamId, "state.json");
177
+ const statePath = resolveWorkstreamPath(projectRoot, workstreamId, "state.json");
147
178
  if (!fs.existsSync(statePath)) {
148
179
  throw new Error(`Unknown workstream: ${workstreamId}`);
149
180
  }
150
181
  }
151
182
  function isLiveWorkstream(projectRoot, workstreamId) {
152
- try {
153
- const workstreamState = loadWorkstreamState(projectRoot, workstreamId);
154
- return LIVE_WORKSTREAM_STATUSES.has(workstreamState.lifecycle_status);
183
+ const statePath = resolveWorkstreamPath(projectRoot, workstreamId, "state.json");
184
+ if (!fs.existsSync(statePath)) {
185
+ return false;
155
186
  }
156
- catch {
187
+ const workstreamState = loadWorkstreamState(projectRoot, workstreamId);
188
+ return LIVE_WORKSTREAM_STATUSES.has(workstreamState.lifecycle_status);
189
+ }
190
+ function isClosedWorkstream(projectRoot, workstreamId) {
191
+ const statePath = resolveWorkstreamPath(projectRoot, workstreamId, "state.json");
192
+ if (!fs.existsSync(statePath)) {
157
193
  return false;
158
194
  }
195
+ const workstreamState = loadWorkstreamState(projectRoot, workstreamId);
196
+ return CLOSED_WORKSTREAM_STATUSES.has(workstreamState.lifecycle_status);
159
197
  }
160
- function readCurrentWorkstreamPointer(pointerPath) {
198
+ export function loadCurrentWorkstreamPointer(pointerPath) {
161
199
  if (!fs.existsSync(pointerPath)) {
162
200
  return null;
163
201
  }
164
202
  const value = fs.readFileSync(pointerPath, "utf8").trim();
165
- return value.length > 0 ? value : null;
203
+ return value.length > 0
204
+ ? validateWorkstreamId(value, `workstream pointer in ${pointerPath}`)
205
+ : null;
166
206
  }
167
207
  function readJsonFile(filePath) {
168
208
  if (!fs.existsSync(filePath)) {
package/dist/state.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEhF,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAC1E,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAMvE,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,mBAA4B;IAC/E,MAAM,WAAW,GAAG,mBAAmB;QACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACnC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAElC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACxE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO;QACL,WAAW;QACX,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC;QAChE,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,oBAAoB,CAAC;QAC7E,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,kBAAkB,CAAC;QACzE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC;QACpE,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACrG,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAChD,oBAAoB,CAAC,YAAY,EAAE,8BAA8B,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,YAA0B;IAC/E,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/E,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC;IACzF,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7F,oBAAoB,CAClB,UAAU,CAAC,qBAAqB,EAChC,4BAA4B,KAAK,CAAC,cAAc,EAAE,CACnD,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACjE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,qCAAqC,CAAC,CAAC;SACvF,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,YAAoB;IAC3E,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACjF,MAAM,eAAe,GAAG,oBAAoB,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,oBAAoB,CAAC,eAAe,CAAC,aAAa,EAAE,oBAAoB,SAAS,EAAE,CAAC,CAAC;IACzG,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,cAAc,YAAY,WAAW,WAAW,GAAG,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,YAAoB;IACvE,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACxF,OAAO,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,UAAsB;IACzE,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACzE,oBAAoB,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,eAAgC;IACxF,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,eAAe,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAClG,aAAa,CACX,SAAS,EACT,oBAAoB,CAAC,eAAe,EAAE,SAAS,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,YAAoB,EAAE,WAAwB;IAClG,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACxF,aAAa,CACX,SAAS,EACT,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,WAAmB,EAAE,YAAoB;IACrF,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,mBAAmB,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAmB,EACnB,oBAA6B,EAC7B,UAA0C,EAAE;IAE5C,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE3C,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;QACrF,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACjD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,qBAAqB,IAAI,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACxG,OAAO,UAAU,CAAC,qBAAqB,CAAC;IAC1C,CAAC;IAED,MAAM,cAAc,GAAG,4BAA4B,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjF,IAAI,cAAc,IAAI,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC;QACpE,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,eAAe,GAAG,iBAAiB,CAAC,WAAW,CAAC;SACnD,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,oCAAoC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAClG,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;QACrC,IAAI,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACtE,OAAO,UAAU,CAAC,qBAAqB,CAAC;QAC1C,CAAC;QAED,IAAI,cAAc,IAAI,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC;YACtE,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,oJAAoJ,CACrJ,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,eAAgC,EAAE,WAAwB;IAChH,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,eAAe,CAAC,WAAW,EAAE,mBAAmB,CAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,eAAgC,EAAE,WAAwB;IAClH,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,eAAe,CAAC,WAAW,EAAE,mBAAmB,CAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,eAAgC,EAAE,WAAwB;IAClH,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,cAAc,GAAG,mBAAmB,CAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7F,eAAe,CAAC,WAAW,EAAE;QAC3B,GAAG,cAAc;QACjB,eAAe,EAAE,SAAS;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,WAAmB,EAAE,eAAgC,EAAE,WAAwB;IACrH,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,6BAA6B,CAAC,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC1E,eAAe,CAAC,WAAW,EAAE;QAC3B,GAAG,UAAU;QACb,qBAAqB,EAAE,eAAe,CAAC,aAAa;QACpD,sBAAsB,EAAE,UAAU,CAAC,sBAAsB;QACzD,cAAc,EAAE,eAAe,CAAC,MAAM,IAAI,UAAU,CAAC,cAAc;QACnE,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,eAAe,CAAC,iBAAiB,IAAI,UAAU,CAAC,WAAW;QACnG,YAAY,EAAE,mBAAmB;QACjC,UAAU,EAAE,SAAS;KACtB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAAsB,EACtB,eAAgC,EAChC,WAAwB,EACxB,WAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,OAAO;QACL,GAAG,UAAU;QACb,qBAAqB,EAAE,eAAe,CAAC,aAAa;QACpD,sBAAsB,EAAE,UAAU,CAAC,sBAAsB;QACzD,cAAc,EAAE,eAAe,CAAC,MAAM,IAAI,UAAU,CAAC,cAAc;QACnE,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,eAAe,CAAC,iBAAiB,IAAI,UAAU,CAAC,WAAW;QACnG,YAAY,EAAE,WAAW;QACzB,aAAa,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa;QAC5E,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,KAAK;QAChC,cAAc,EAAE,UAAU,CAAC,cAAc,IAAI,EAAE;QAC/C,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,WAAmB,EAAE,YAAoB;IACvE,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACjF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,uBAAuB,YAAY,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,YAAoB;IACjE,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACjF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACvE,OAAO,wBAAwB,CAAC,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB,EAAE,YAAoB;IACnE,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACjF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACvE,OAAO,0BAA0B,CAAC,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,WAAmB;IAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;QACrB,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,WAAW,EAAE,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAY,CAAC;AAClE,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,KAAc;IACrD,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { CaptureEntry, FocusState, ProjectState, ResumeState, WorkstreamState } from "./types.js";
2
+ export declare const STATE_SCHEMA_FIELDS: {
3
+ readonly project: readonly ["version", "project_id", "project_name", "objective", "default_briefing_mode", "tracked_artifacts", "workstreams", "created_at", "updated_at"];
4
+ readonly focus: readonly ["version", "current_workstream_id", "current_environment_id", "current_branch", "resume_from", "last_command", "last_saved_at", "last_wrapped_at", "stale", "mismatch_flags", "updated_at"];
5
+ readonly workstream: readonly ["version", "workstream_id", "title", "objective", "lifecycle_status", "mode", "status_summary", "active_files", "active_artifacts", "blockers", "open_questions", "next_actions", "continuation_hint", "branch", "last_saved_at", "last_wrapped_at", "completed_at", "created_at", "updated_at"];
6
+ readonly resume: readonly ["version", "remaining_tasks", "paused_reason", "resume_from", "updated_at"];
7
+ };
8
+ export declare function parseProjectState(value: unknown, source: string): ProjectState;
9
+ export declare function parseFocusState(value: unknown, source: string): FocusState;
10
+ export declare function parseWorkstreamState(value: unknown, source: string): WorkstreamState;
11
+ export declare function parseResumeState(value: unknown, source: string): ResumeState;
12
+ /**
13
+ * Validated per line rather than per file, so one malformed entry does not
14
+ * abort the rest of the log.
15
+ */
16
+ export declare function parseCaptureEntry(value: unknown, source: string): CaptureEntry;