@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.
- package/LICENSE +21 -0
- package/dist/capture.js +2 -1
- package/dist/capture.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/discovery.d.ts +9 -0
- package/dist/discovery.js +25 -0
- package/dist/discovery.js.map +1 -1
- package/dist/doctor.js +140 -112
- package/dist/doctor.js.map +1 -1
- package/dist/find.js +2 -1
- package/dist/find.js.map +1 -1
- package/dist/git.d.ts +1 -0
- package/dist/git.js +15 -0
- package/dist/git.js.map +1 -0
- package/dist/go.js +6 -1
- package/dist/go.js.map +1 -1
- package/dist/headline.d.ts +13 -0
- package/dist/headline.js +32 -0
- package/dist/headline.js.map +1 -0
- package/dist/index.d.ts +14 -3
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/init.js +93 -51
- package/dist/init.js.map +1 -1
- package/dist/invariantSnapshot.d.ts +2 -0
- package/dist/invariantSnapshot.js +219 -0
- package/dist/invariantSnapshot.js.map +1 -0
- package/dist/invariantTypes.d.ts +100 -0
- package/dist/invariantTypes.js +4 -0
- package/dist/invariantTypes.js.map +1 -0
- package/dist/invariants.d.ts +13 -0
- package/dist/invariants.js +415 -0
- package/dist/invariants.js.map +1 -0
- package/dist/listMutation.d.ts +4 -0
- package/dist/listMutation.js +37 -0
- package/dist/listMutation.js.map +1 -0
- package/dist/obligations.d.ts +3 -0
- package/dist/obligations.js +84 -0
- package/dist/obligations.js.map +1 -0
- package/dist/persistence.js +7 -4
- package/dist/persistence.js.map +1 -1
- package/dist/save.js +34 -34
- package/dist/save.js.map +1 -1
- package/dist/staleness.d.ts +2 -2
- package/dist/staleness.js +12 -89
- package/dist/staleness.js.map +1 -1
- package/dist/state.d.ts +6 -1
- package/dist/state.js +63 -23
- package/dist/state.js.map +1 -1
- package/dist/stateSchemas.d.ts +16 -0
- package/dist/stateSchemas.js +212 -0
- package/dist/stateSchemas.js.map +1 -0
- package/dist/status.js +1 -1
- package/dist/status.js.map +1 -1
- package/dist/trackedPath.d.ts +3 -0
- package/dist/trackedPath.js +27 -0
- package/dist/trackedPath.js.map +1 -0
- package/dist/types.d.ts +33 -18
- package/dist/workstream.js +3 -8
- package/dist/workstream.js.map +1 -1
- package/dist/workstreamId.d.ts +2 -0
- package/dist/workstreamId.js +67 -0
- package/dist/workstreamId.js.map +1 -0
- package/dist/wrap.js +100 -46
- package/dist/wrap.js.map +1 -1
- package/package.json +12 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ken Graham
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/capture.js
CHANGED
|
@@ -2,6 +2,7 @@ import crypto from "node:crypto";
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { resolveProjectRoot, resolveTargetWorkstream } from "./state.js";
|
|
5
|
+
import { resolveWorkstreamPath } from "./workstreamId.js";
|
|
5
6
|
const MAX_BODY_BYTES = 1024 * 1024;
|
|
6
7
|
const MAX_NOTE_BYTES = 16 * 1024;
|
|
7
8
|
export function captureMaterial(options) {
|
|
@@ -63,7 +64,7 @@ export function getCaptureLogPath(projectRoot, scope, workstreamId) {
|
|
|
63
64
|
if (!workstreamId) {
|
|
64
65
|
throw new Error("workstream capture log requires a workstream id.");
|
|
65
66
|
}
|
|
66
|
-
return
|
|
67
|
+
return resolveWorkstreamPath(projectRoot, workstreamId, "captures.jsonl");
|
|
67
68
|
}
|
|
68
69
|
function appendCaptureEntry(capturePath, entry) {
|
|
69
70
|
fs.mkdirSync(path.dirname(capturePath), { recursive: true });
|
package/dist/capture.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AASzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjC,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE5B,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,KAAK,YAAY;QACzC,CAAC,CAAC,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC;QAC5D,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAElE,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,kBAAkB,CAAC,cAAc,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACzD,kBAAkB,CAAC,cAAc,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAiB;QAC1B,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,cAAc,CAAC,UAAU,CAAC;QAC9B,WAAW,EAAE,UAAU;QACvB,KAAK;QACL,aAAa,EAAE,YAAY;QAC3B,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,MAAM,EAAE;YACN,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,OAAO,CAAC,WAAW;SAC3B;KACF,CAAC;IAEF,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACxE,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEvC,OAAO;QACL,WAAW;QACX,WAAW;QACX,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,YAAoB,EAAE,KAAK,GAAG,CAAC;IACrF,OAAO,gCAAgC,CAAC,WAAW,EAAE,YAAY,CAAC;SAC/D,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACxE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,WAAmB,EAAE,YAAoB;IACxF,MAAM,eAAe,GAAG,cAAc,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACxF,MAAM,kBAAkB,GAAG,cAAc,CAAC,iBAAiB,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAEtG,OAAO,CAAC,GAAG,eAAe,EAAE,GAAG,kBAAkB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,KAAmB,EACnB,YAA2B;IAE3B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB,EAAE,KAAmB;IAClE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB;IACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,4BAA4B,WAAW,IAAI,KAAK,GAAG,CAAC,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAwB;IACpD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAwB;IACpD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAmB,EAAE,KAAe;IACnE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE9D,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,KAAoB,EAAE,QAAgB;IAC/E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,QAAQ,SAAS,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACnF,OAAO,OAAO,gBAAgB,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5E,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -7,5 +7,6 @@ export interface ProjectConfig {
|
|
|
7
7
|
default_workstream: string;
|
|
8
8
|
tracked_artifacts: string[];
|
|
9
9
|
}
|
|
10
|
+
export declare const PROJECT_CONFIG_FIELDS: readonly ["version", "project_id", "project_name", "default_briefing_mode", "default_workstream", "tracked_artifacts"];
|
|
10
11
|
export declare function loadProjectConfig(projectRoot: string): ProjectConfig;
|
|
11
12
|
export declare function parseProjectConfigFile(configPath: string): ProjectConfig;
|
package/dist/config.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { validateWorkstreamId } from "./workstreamId.js";
|
|
4
|
+
export const PROJECT_CONFIG_FIELDS = [
|
|
5
|
+
"version",
|
|
6
|
+
"project_id",
|
|
7
|
+
"project_name",
|
|
8
|
+
"default_briefing_mode",
|
|
9
|
+
"default_workstream",
|
|
10
|
+
"tracked_artifacts",
|
|
11
|
+
];
|
|
3
12
|
export function loadProjectConfig(projectRoot) {
|
|
4
13
|
return parseProjectConfigFile(path.join(projectRoot, ".iq-context", "config.yaml"));
|
|
5
14
|
}
|
|
@@ -30,7 +39,7 @@ export function parseProjectConfigFile(configPath) {
|
|
|
30
39
|
project_id: requireString(parsed.project_id, "project_id", configPath),
|
|
31
40
|
project_name: requireString(parsed.project_name, "project_name", configPath),
|
|
32
41
|
default_briefing_mode: briefingMode,
|
|
33
|
-
default_workstream: requireString(parsed.default_workstream, "default_workstream", configPath),
|
|
42
|
+
default_workstream: validateWorkstreamId(requireString(parsed.default_workstream, "default_workstream", configPath), `default_workstream in ${configPath}`),
|
|
34
43
|
tracked_artifacts: trackedArtifacts,
|
|
35
44
|
};
|
|
36
45
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.d.ts
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
1
|
export declare function discoverProjectRoot(startDir: string): string | null;
|
|
2
|
+
export declare function isProjectStateDir(projectRoot: string): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Discovers a project by its state directory rather than its config file.
|
|
5
|
+
*
|
|
6
|
+
* `discoverProjectRoot` keys on `.iq-context/config.yaml`, so a project whose
|
|
7
|
+
* config is missing is undiscoverable — which would make that exact failure
|
|
8
|
+
* impossible for `doctor` to diagnose.
|
|
9
|
+
*/
|
|
10
|
+
export declare function discoverProjectRootByStateDir(startDir: string): string | null;
|
package/dist/discovery.js
CHANGED
|
@@ -15,4 +15,29 @@ export function discoverProjectRoot(startDir) {
|
|
|
15
15
|
currentDir = parentDir;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
const STATE_RELATIVE_PATH = ".iq-context";
|
|
19
|
+
export function isProjectStateDir(projectRoot) {
|
|
20
|
+
const stateDir = path.join(projectRoot, STATE_RELATIVE_PATH);
|
|
21
|
+
return fs.existsSync(stateDir) && fs.statSync(stateDir).isDirectory();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Discovers a project by its state directory rather than its config file.
|
|
25
|
+
*
|
|
26
|
+
* `discoverProjectRoot` keys on `.iq-context/config.yaml`, so a project whose
|
|
27
|
+
* config is missing is undiscoverable — which would make that exact failure
|
|
28
|
+
* impossible for `doctor` to diagnose.
|
|
29
|
+
*/
|
|
30
|
+
export function discoverProjectRootByStateDir(startDir) {
|
|
31
|
+
let currentDir = path.resolve(startDir);
|
|
32
|
+
while (true) {
|
|
33
|
+
if (isProjectStateDir(currentDir)) {
|
|
34
|
+
return currentDir;
|
|
35
|
+
}
|
|
36
|
+
const parentDir = path.dirname(currentDir);
|
|
37
|
+
if (parentDir === currentDir) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
currentDir = parentDir;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
18
43
|
//# sourceMappingURL=discovery.js.map
|
package/dist/discovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAErE,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAE/D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAErE,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAE/D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAE1C,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAC7D,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAAgB;IAC5D,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;AACH,CAAC"}
|
package/dist/doctor.js
CHANGED
|
@@ -1,65 +1,152 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { discoverProjectRootByStateDir, isProjectStateDir } from "./discovery.js";
|
|
4
4
|
import { detectTrackedArtifacts } from "./init.js";
|
|
5
|
-
import {
|
|
5
|
+
import { evaluateInvariants } from "./invariants.js";
|
|
6
|
+
import { loadInvariantSnapshot } from "./invariantSnapshot.js";
|
|
7
|
+
import { getProjectPaths } from "./state.js";
|
|
6
8
|
export function runDoctor(options) {
|
|
7
|
-
const projectRoot =
|
|
9
|
+
const projectRoot = resolveDoctorProjectRoot(options.startDir, options.projectRoot);
|
|
8
10
|
const paths = getProjectPaths(projectRoot);
|
|
11
|
+
const snapshot = loadInvariantSnapshot(projectRoot);
|
|
9
12
|
const checks = [];
|
|
10
13
|
checks.push(checkPathExists(paths.configPath, "config.yaml exists"));
|
|
11
|
-
checks.push(
|
|
12
|
-
checks.push(
|
|
13
|
-
checks.push(
|
|
14
|
-
checks.push(
|
|
15
|
-
checks.push(
|
|
16
|
-
checks.push(
|
|
17
|
-
checks.push(
|
|
18
|
-
checks.push(
|
|
19
|
-
checks.push(
|
|
20
|
-
checks.push(
|
|
21
|
-
checks.push(
|
|
22
|
-
checks.push(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
checks.push(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
checks.push(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
14
|
+
checks.push(loadCheck(snapshot.config, "config.yaml has a valid v1 config contract"));
|
|
15
|
+
checks.push(loadCheck(snapshot.project, "project-state.json has a valid v1 schema"));
|
|
16
|
+
checks.push(loadCheck(snapshot.focus, "focus-state.json has a valid v1 schema"));
|
|
17
|
+
checks.push(pointerCheck(snapshot, paths.currentWorkstreamPath));
|
|
18
|
+
checks.push(checkDetectedTrackedArtifacts(projectRoot, snapshot, paths.configPath));
|
|
19
|
+
checks.push(checkDirExists(paths.workstreamsDir, "workstreams directory exists"));
|
|
20
|
+
checks.push(checkWorkstreamDirNames(snapshot));
|
|
21
|
+
checks.push(checkDirExists(path.join(projectRoot, ".iq-context", "logs"), "logs directory exists"));
|
|
22
|
+
checks.push(checkDirExists(path.join(projectRoot, "docs", "sessions"), "sessions directory exists"));
|
|
23
|
+
checks.push(checkDirExists(path.join(projectRoot, "docs", "decisions"), "decisions directory exists"));
|
|
24
|
+
checks.push(checkDirExists(path.join(projectRoot, "docs", "discoveries"), "discoveries directory exists"));
|
|
25
|
+
checks.push(checkDirExists(path.join(projectRoot, "docs", "assumptions"), "assumptions directory exists"));
|
|
26
|
+
checks.push(captureCheck(snapshot.projectCaptures, "project captures JSONL is valid"));
|
|
27
|
+
checks.push(atLeastOneWorkstreamCheck(snapshot));
|
|
28
|
+
for (const workstream of snapshot.workstreams) {
|
|
29
|
+
checks.push(loadCheck(workstream.state, `workstream ${workstream.id} state has a valid v1 schema`));
|
|
30
|
+
checks.push(loadCheck(workstream.resume, `workstream ${workstream.id} resume state has a valid v1 schema`));
|
|
31
|
+
checks.push(loadCheck(workstream.hostBindings, `workstream ${workstream.id} host bindings are valid JSON`));
|
|
32
|
+
checks.push(captureCheck(workstream.captures, `workstream ${workstream.id} captures JSONL is valid`));
|
|
33
|
+
}
|
|
34
|
+
for (const evaluation of evaluateInvariants(snapshot)) {
|
|
35
|
+
checks.push(invariantCheck(evaluation));
|
|
36
|
+
}
|
|
37
|
+
return { projectRoot, checks };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Doctor resolves its own root: resolveProjectRoot rejects a project whose
|
|
41
|
+
* config.yaml is missing, and discoverProjectRoot keys on that same file, so
|
|
42
|
+
* neither can reach a project that needs exactly this diagnosis. An explicit
|
|
43
|
+
* root must still be a real project state directory, so pointing doctor at an
|
|
44
|
+
* unrelated path stays a clean error rather than a wall of failures.
|
|
45
|
+
*/
|
|
46
|
+
function resolveDoctorProjectRoot(startDir, explicitProjectRoot) {
|
|
47
|
+
if (explicitProjectRoot) {
|
|
48
|
+
const projectRoot = path.resolve(explicitProjectRoot);
|
|
49
|
+
if (!isProjectStateDir(projectRoot)) {
|
|
50
|
+
throw new Error(`No iq-context project at ${projectRoot}. Run iq-context init first.`);
|
|
43
51
|
}
|
|
52
|
+
return projectRoot;
|
|
44
53
|
}
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
const discovered = discoverProjectRootByStateDir(startDir);
|
|
55
|
+
if (!discovered) {
|
|
56
|
+
throw new Error("No iq-context project found. Run iq-context init first.");
|
|
47
57
|
}
|
|
48
|
-
return
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
};
|
|
58
|
+
return discovered;
|
|
59
|
+
}
|
|
60
|
+
function invariantCheck(evaluation) {
|
|
61
|
+
const { invariant, outcome } = evaluation;
|
|
62
|
+
const label = `${invariant.id} — ${invariant.description}`;
|
|
63
|
+
if (outcome.status === "pass") {
|
|
64
|
+
return passCheck(label);
|
|
65
|
+
}
|
|
66
|
+
if (outcome.status === "skipped") {
|
|
67
|
+
return { label, status: "skipped", message: `Not evaluated: ${outcome.reason}.` };
|
|
68
|
+
}
|
|
69
|
+
if (outcome.status === "partial") {
|
|
70
|
+
return {
|
|
71
|
+
label,
|
|
72
|
+
status: "partial",
|
|
73
|
+
message: `Not evaluated for: ${outcome.skippedScopes.join(", ")}.`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const lines = outcome.violations.map((violation) => violation.message);
|
|
77
|
+
if (outcome.skippedScopes.length > 0) {
|
|
78
|
+
lines.push(`Not evaluated for: ${outcome.skippedScopes.join(", ")}.`);
|
|
79
|
+
}
|
|
80
|
+
const hasError = outcome.violations.some((violation) => violation.severity === "error");
|
|
81
|
+
return hasError ? failCheck(label, lines.join("\n")) : warnCheck(label, lines.join("\n"));
|
|
82
|
+
}
|
|
83
|
+
function loadCheck(result, label) {
|
|
84
|
+
return result.loaded ? passCheck(label) : failCheck(label, result.error);
|
|
85
|
+
}
|
|
86
|
+
function atLeastOneWorkstreamCheck(snapshot) {
|
|
87
|
+
const label = "at least one workstream exists";
|
|
88
|
+
if (!snapshot.workstreamDirs.loaded) {
|
|
89
|
+
return {
|
|
90
|
+
label,
|
|
91
|
+
status: "skipped",
|
|
92
|
+
message: "Not evaluated: the workstreams directory listing did not load.",
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return snapshot.workstreamDirs.value.valid.length === 0
|
|
96
|
+
? failCheck(label, "No workstreams found.")
|
|
97
|
+
: passCheck(label);
|
|
52
98
|
}
|
|
53
|
-
|
|
99
|
+
/**
|
|
100
|
+
* An absent pointer stays a WARN with its historical message: it is optional,
|
|
101
|
+
* runtime falls back to focus state, and strict-mode behavior depends on it.
|
|
102
|
+
*/
|
|
103
|
+
function pointerCheck(snapshot, pointerPath) {
|
|
104
|
+
const label = "current workstream pointer is valid";
|
|
105
|
+
if (!snapshot.pointer.loaded) {
|
|
106
|
+
return failCheck(label, snapshot.pointer.error);
|
|
107
|
+
}
|
|
108
|
+
if (snapshot.pointer.value === null) {
|
|
109
|
+
return warnCheck(label, `Missing or empty optional pointer: ${pointerPath}. Runtime target resolution will use focus state or live-workstream discovery.`);
|
|
110
|
+
}
|
|
111
|
+
return passCheck(label);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Syntax and containment failures keep the historical FAIL. A shape failure is
|
|
115
|
+
* new strictness and reports WARN, so a project carrying older capture lines
|
|
116
|
+
* does not newly fail.
|
|
117
|
+
*/
|
|
118
|
+
function captureCheck(results, label) {
|
|
119
|
+
const failures = results.filter((result) => !result.loaded);
|
|
120
|
+
if (failures.length === 0) {
|
|
121
|
+
return passCheck(label);
|
|
122
|
+
}
|
|
123
|
+
const message = failures.map((result) => (result.loaded ? "" : result.error)).join("\n");
|
|
124
|
+
const hard = failures.some((result) => !result.loaded && result.kind !== "schema");
|
|
125
|
+
return hard ? failCheck(label, message) : warnCheck(label, message);
|
|
126
|
+
}
|
|
127
|
+
function checkWorkstreamDirNames(snapshot) {
|
|
128
|
+
const label = "workstream directory names are valid";
|
|
129
|
+
if (!snapshot.workstreamDirs.loaded) {
|
|
130
|
+
return failCheck(label, snapshot.workstreamDirs.error);
|
|
131
|
+
}
|
|
132
|
+
const invalid = snapshot.workstreamDirs.value.invalid;
|
|
133
|
+
return invalid.length === 0
|
|
134
|
+
? passCheck(label)
|
|
135
|
+
: failCheck(label, `Invalid workstream directory names: ${invalid.join(", ")}.`);
|
|
136
|
+
}
|
|
137
|
+
function checkDetectedTrackedArtifacts(projectRoot, snapshot, configPath) {
|
|
138
|
+
const label = "detected tracked artifacts are configured";
|
|
139
|
+
if (!snapshot.config.loaded) {
|
|
140
|
+
return { label, status: "skipped", message: "Not evaluated: config.yaml did not load." };
|
|
141
|
+
}
|
|
54
142
|
try {
|
|
55
|
-
const config = parseProjectConfigFile(configPath);
|
|
56
143
|
const detectedArtifacts = detectTrackedArtifacts(projectRoot);
|
|
57
|
-
const configuredArtifacts = new Set(config.tracked_artifacts);
|
|
144
|
+
const configuredArtifacts = new Set(snapshot.config.value.tracked_artifacts);
|
|
58
145
|
const missingArtifacts = detectedArtifacts.filter((artifact) => !configuredArtifacts.has(artifact));
|
|
59
146
|
if (missingArtifacts.length === 0) {
|
|
60
|
-
return passCheck(
|
|
147
|
+
return passCheck(label);
|
|
61
148
|
}
|
|
62
|
-
return warnCheck(
|
|
149
|
+
return warnCheck(label, [
|
|
63
150
|
"Detected tracked artifacts are not configured.",
|
|
64
151
|
"Missing detected tracked artifacts:",
|
|
65
152
|
...missingArtifacts.map((artifact) => `- ${artifact}`),
|
|
@@ -68,38 +155,7 @@ function checkDetectedTrackedArtifacts(projectRoot, configPath) {
|
|
|
68
155
|
].join("\n"));
|
|
69
156
|
}
|
|
70
157
|
catch (error) {
|
|
71
|
-
return failCheck(
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
function checkProjectConfig(configPath) {
|
|
75
|
-
try {
|
|
76
|
-
parseProjectConfigFile(configPath);
|
|
77
|
-
return passCheck("config.yaml has a valid v1 config contract");
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
return failCheck("config.yaml has a valid v1 config contract", error instanceof Error ? error.message : String(error));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function checkConfigMatchesProjectState(projectRoot, configPath) {
|
|
84
|
-
try {
|
|
85
|
-
const config = parseProjectConfigFile(configPath);
|
|
86
|
-
const projectState = loadProjectState(projectRoot);
|
|
87
|
-
if (config.project_id !== projectState.project_id) {
|
|
88
|
-
return failCheck("config.yaml matches project-state defaults", `project_id mismatch: config has ${config.project_id}, project-state has ${projectState.project_id}.`);
|
|
89
|
-
}
|
|
90
|
-
if (config.project_name !== projectState.project_name) {
|
|
91
|
-
return failCheck("config.yaml matches project-state defaults", `project_name mismatch: config has ${config.project_name}, project-state has ${projectState.project_name}.`);
|
|
92
|
-
}
|
|
93
|
-
if (config.default_briefing_mode !== projectState.default_briefing_mode) {
|
|
94
|
-
return failCheck("config.yaml matches project-state defaults", `default_briefing_mode mismatch: config has ${config.default_briefing_mode}, project-state has ${projectState.default_briefing_mode}.`);
|
|
95
|
-
}
|
|
96
|
-
if (JSON.stringify(config.tracked_artifacts) !== JSON.stringify(projectState.tracked_artifacts)) {
|
|
97
|
-
return failCheck("config.yaml matches project-state defaults", "tracked_artifacts mismatch between config.yaml and project-state.json.");
|
|
98
|
-
}
|
|
99
|
-
return passCheck("config.yaml matches project-state defaults");
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
return failCheck("config.yaml matches project-state defaults", error instanceof Error ? error.message : String(error));
|
|
158
|
+
return failCheck(label, error instanceof Error ? error.message : String(error));
|
|
103
159
|
}
|
|
104
160
|
}
|
|
105
161
|
function checkPathExists(filePath, label) {
|
|
@@ -107,41 +163,13 @@ function checkPathExists(filePath, label) {
|
|
|
107
163
|
? passCheck(label)
|
|
108
164
|
: failCheck(label, `Missing path: ${filePath}`);
|
|
109
165
|
}
|
|
110
|
-
function
|
|
111
|
-
if (!fs.existsSync(
|
|
112
|
-
return failCheck(label, `Missing
|
|
166
|
+
function checkDirExists(dirPath, label) {
|
|
167
|
+
if (!fs.existsSync(dirPath)) {
|
|
168
|
+
return failCheck(label, `Missing path: ${dirPath}`);
|
|
113
169
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
return failCheck(label, error instanceof Error ? error.message : String(error));
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
function checkOptionalJsonFile(filePath, label) {
|
|
123
|
-
if (!fs.existsSync(filePath)) {
|
|
124
|
-
return passCheck(label);
|
|
125
|
-
}
|
|
126
|
-
return checkJsonFile(filePath, label);
|
|
127
|
-
}
|
|
128
|
-
function checkOptionalJsonlFile(filePath, label) {
|
|
129
|
-
if (!fs.existsSync(filePath)) {
|
|
130
|
-
return passCheck(label);
|
|
131
|
-
}
|
|
132
|
-
const lines = fs.readFileSync(filePath, "utf8").split(/\r?\n/);
|
|
133
|
-
for (const [index, line] of lines.entries()) {
|
|
134
|
-
if (line.trim().length === 0) {
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
try {
|
|
138
|
-
JSON.parse(line);
|
|
139
|
-
}
|
|
140
|
-
catch (error) {
|
|
141
|
-
return failCheck(label, `${filePath}:${index + 1}: ${error instanceof Error ? error.message : String(error)}`);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return passCheck(label);
|
|
170
|
+
return fs.statSync(dirPath).isDirectory()
|
|
171
|
+
? passCheck(label)
|
|
172
|
+
: failCheck(label, `Not a directory: ${dirPath}`);
|
|
145
173
|
}
|
|
146
174
|
function passCheck(label) {
|
|
147
175
|
return {
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/find.js
CHANGED
|
@@ -3,6 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import { loadProjectConfig } from "./config.js";
|
|
4
4
|
import { resolveProjectRoot, resolveTargetWorkstream } from "./state.js";
|
|
5
5
|
import { resolveTrackedArtifacts } from "./trackedArtifacts.js";
|
|
6
|
+
import { resolveWorkstreamPath } from "./workstreamId.js";
|
|
6
7
|
export function findInProject(options) {
|
|
7
8
|
const projectRoot = resolveProjectRoot(options.startDir, options.projectRoot);
|
|
8
9
|
const query = options.query.trim();
|
|
@@ -65,7 +66,7 @@ function collectSearchTargets(projectRoot, scope, workstreamId) {
|
|
|
65
66
|
}
|
|
66
67
|
if (scope === "captures") {
|
|
67
68
|
if (workstreamId) {
|
|
68
|
-
const capturePath =
|
|
69
|
+
const capturePath = resolveWorkstreamPath(projectRoot, workstreamId, "captures.jsonl");
|
|
69
70
|
if (fs.existsSync(capturePath)) {
|
|
70
71
|
targets.push({ filePath: capturePath, sourceKind: "capture" });
|
|
71
72
|
}
|
package/dist/find.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.js","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"find.js","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"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"}
|
package/dist/git.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function detectGitBranch(projectRoot: string): string | null;
|
package/dist/git.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
export function detectGitBranch(projectRoot) {
|
|
3
|
+
try {
|
|
4
|
+
const branch = execFileSync("git", ["branch", "--show-current"], {
|
|
5
|
+
cwd: projectRoot,
|
|
6
|
+
encoding: "utf8",
|
|
7
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
8
|
+
}).trim();
|
|
9
|
+
return branch.length > 0 ? branch : null;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=git.js.map
|
package/dist/git.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE;YAC/D,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/go.js
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { listRecentCaptures } from "./capture.js";
|
|
2
2
|
import { loadProjectConfig } from "./config.js";
|
|
3
|
+
import { loadOpenObligations } from "./obligations.js";
|
|
3
4
|
import { loadResumeState, loadWorkstreamState, resolveProjectRoot, resolveTargetWorkstream, updateFocusAfterGo, } from "./state.js";
|
|
4
5
|
import { refreshStaleness } from "./staleness.js";
|
|
5
6
|
import { resolveTrackedArtifacts } from "./trackedArtifacts.js";
|
|
6
7
|
export function buildGoBriefing(options) {
|
|
7
8
|
const projectRoot = resolveProjectRoot(options.startDir, options.projectRoot);
|
|
8
9
|
const config = loadProjectConfig(projectRoot);
|
|
9
|
-
const workstreamId = resolveTargetWorkstream(projectRoot, options.workstreamId
|
|
10
|
+
const workstreamId = resolveTargetWorkstream(projectRoot, options.workstreamId, {
|
|
11
|
+
allowClosedFocusFallback: true,
|
|
12
|
+
});
|
|
10
13
|
const workstreamState = loadWorkstreamState(projectRoot, workstreamId);
|
|
11
14
|
const resumeState = loadResumeState(projectRoot, workstreamId);
|
|
12
15
|
const recentCaptures = listRecentCaptures(projectRoot, workstreamId);
|
|
16
|
+
const openObligations = loadOpenObligations(projectRoot);
|
|
13
17
|
const trackedArtifacts = resolveTrackedArtifacts(projectRoot, config.tracked_artifacts);
|
|
14
18
|
updateFocusAfterGo(projectRoot, workstreamState, resumeState);
|
|
15
19
|
const staleResult = refreshStaleness(projectRoot, workstreamId, trackedArtifacts);
|
|
@@ -23,6 +27,7 @@ export function buildGoBriefing(options) {
|
|
|
23
27
|
configuredPatterns: [...config.tracked_artifacts],
|
|
24
28
|
resolvedPaths: trackedArtifacts.map((artifact) => artifact.relativePath),
|
|
25
29
|
},
|
|
30
|
+
openObligations,
|
|
26
31
|
recentCaptures,
|
|
27
32
|
warnings: [...staleResult.staleness.warnings, ...staleResult.staleness.mismatchFlags],
|
|
28
33
|
staleness: staleResult.staleness,
|