youmd 0.10.2 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/commands/brain.d.ts.map +1 -1
  2. package/dist/commands/brain.js +91 -28
  3. package/dist/commands/brain.js.map +1 -1
  4. package/dist/commands/chat.d.ts.map +1 -1
  5. package/dist/commands/chat.js +6 -1
  6. package/dist/commands/chat.js.map +1 -1
  7. package/dist/commands/conversations.d.ts +5 -0
  8. package/dist/commands/conversations.d.ts.map +1 -0
  9. package/dist/commands/conversations.js +116 -0
  10. package/dist/commands/conversations.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +1 -0
  12. package/dist/commands/doctor.d.ts.map +1 -1
  13. package/dist/commands/doctor.js +16 -1
  14. package/dist/commands/doctor.js.map +1 -1
  15. package/dist/commands/founder.d.ts +13 -0
  16. package/dist/commands/founder.d.ts.map +1 -0
  17. package/dist/commands/founder.js +189 -0
  18. package/dist/commands/founder.js.map +1 -0
  19. package/dist/commands/handoff.d.ts +5 -0
  20. package/dist/commands/handoff.d.ts.map +1 -0
  21. package/dist/commands/handoff.js +432 -0
  22. package/dist/commands/handoff.js.map +1 -0
  23. package/dist/commands/orchestrate.d.ts +15 -0
  24. package/dist/commands/orchestrate.d.ts.map +1 -1
  25. package/dist/commands/orchestrate.js +294 -0
  26. package/dist/commands/orchestrate.js.map +1 -1
  27. package/dist/commands/project.d.ts.map +1 -1
  28. package/dist/commands/project.js +8 -1
  29. package/dist/commands/project.js.map +1 -1
  30. package/dist/commands/reconcile.d.ts +15 -0
  31. package/dist/commands/reconcile.d.ts.map +1 -0
  32. package/dist/commands/reconcile.js +260 -0
  33. package/dist/commands/reconcile.js.map +1 -0
  34. package/dist/commands/session.d.ts +28 -0
  35. package/dist/commands/session.d.ts.map +1 -0
  36. package/dist/commands/session.js +895 -0
  37. package/dist/commands/session.js.map +1 -0
  38. package/dist/commands/stack.d.ts +2 -0
  39. package/dist/commands/stack.d.ts.map +1 -1
  40. package/dist/commands/stack.js +26 -0
  41. package/dist/commands/stack.js.map +1 -1
  42. package/dist/commands/sync.d.ts.map +1 -1
  43. package/dist/commands/sync.js +11 -0
  44. package/dist/commands/sync.js.map +1 -1
  45. package/dist/commands/tasks.d.ts +57 -0
  46. package/dist/commands/tasks.d.ts.map +1 -1
  47. package/dist/commands/tasks.js +236 -31
  48. package/dist/commands/tasks.js.map +1 -1
  49. package/dist/generated/capability-registry.d.ts +311 -71
  50. package/dist/generated/capability-registry.d.ts.map +1 -1
  51. package/dist/generated/capability-registry.js +346 -71
  52. package/dist/generated/capability-registry.js.map +1 -1
  53. package/dist/index.js +113 -2
  54. package/dist/index.js.map +1 -1
  55. package/dist/lib/api.d.ts +362 -1
  56. package/dist/lib/api.d.ts.map +1 -1
  57. package/dist/lib/api.js +171 -0
  58. package/dist/lib/api.js.map +1 -1
  59. package/dist/lib/brain/adapters.d.ts +20 -1
  60. package/dist/lib/brain/adapters.d.ts.map +1 -1
  61. package/dist/lib/brain/adapters.js +113 -2
  62. package/dist/lib/brain/adapters.js.map +1 -1
  63. package/dist/lib/brain/approval-key-trust.d.ts +29 -0
  64. package/dist/lib/brain/approval-key-trust.d.ts.map +1 -0
  65. package/dist/lib/brain/approval-key-trust.js +139 -0
  66. package/dist/lib/brain/approval-key-trust.js.map +1 -0
  67. package/dist/lib/brain/cache.d.ts +2 -2
  68. package/dist/lib/brain/cache.d.ts.map +1 -1
  69. package/dist/lib/brain/cache.js +4 -4
  70. package/dist/lib/brain/cache.js.map +1 -1
  71. package/dist/lib/brain/content.d.ts +56 -0
  72. package/dist/lib/brain/content.d.ts.map +1 -0
  73. package/dist/lib/brain/content.js +362 -0
  74. package/dist/lib/brain/content.js.map +1 -0
  75. package/dist/lib/brain/descriptor-validator.d.ts +11 -0
  76. package/dist/lib/brain/descriptor-validator.d.ts.map +1 -0
  77. package/dist/lib/brain/descriptor-validator.js +185 -0
  78. package/dist/lib/brain/descriptor-validator.js.map +1 -0
  79. package/dist/lib/brain/discovery.d.ts.map +1 -1
  80. package/dist/lib/brain/discovery.js +103 -60
  81. package/dist/lib/brain/discovery.js.map +1 -1
  82. package/dist/lib/brain/index.d.ts +2 -0
  83. package/dist/lib/brain/index.d.ts.map +1 -1
  84. package/dist/lib/brain/index.js +8 -2
  85. package/dist/lib/brain/index.js.map +1 -1
  86. package/dist/lib/brain/proposal.d.ts +53 -5
  87. package/dist/lib/brain/proposal.d.ts.map +1 -1
  88. package/dist/lib/brain/proposal.js +341 -64
  89. package/dist/lib/brain/proposal.js.map +1 -1
  90. package/dist/lib/brain/safe-file.d.ts +25 -1
  91. package/dist/lib/brain/safe-file.d.ts.map +1 -1
  92. package/dist/lib/brain/safe-file.js +250 -30
  93. package/dist/lib/brain/safe-file.js.map +1 -1
  94. package/dist/lib/brain/safe-open.d.ts +2 -0
  95. package/dist/lib/brain/safe-open.d.ts.map +1 -0
  96. package/dist/lib/brain/safe-open.js +77 -0
  97. package/dist/lib/brain/safe-open.js.map +1 -0
  98. package/dist/lib/brain/safety.d.ts.map +1 -1
  99. package/dist/lib/brain/safety.js +5 -0
  100. package/dist/lib/brain/safety.js.map +1 -1
  101. package/dist/lib/brain/staged-apply.d.ts +2 -1
  102. package/dist/lib/brain/staged-apply.d.ts.map +1 -1
  103. package/dist/lib/brain/staged-apply.js +6 -3
  104. package/dist/lib/brain/staged-apply.js.map +1 -1
  105. package/dist/lib/brain/store.d.ts +3 -0
  106. package/dist/lib/brain/store.d.ts.map +1 -1
  107. package/dist/lib/brain/store.js +68 -0
  108. package/dist/lib/brain/store.js.map +1 -1
  109. package/dist/lib/brain/sync.d.ts +87 -0
  110. package/dist/lib/brain/sync.d.ts.map +1 -0
  111. package/dist/lib/brain/sync.js +238 -0
  112. package/dist/lib/brain/sync.js.map +1 -0
  113. package/dist/lib/brain/types.d.ts +23 -0
  114. package/dist/lib/brain/types.d.ts.map +1 -1
  115. package/dist/lib/config.d.ts +7 -0
  116. package/dist/lib/config.d.ts.map +1 -1
  117. package/dist/lib/config.js +3 -0
  118. package/dist/lib/config.js.map +1 -1
  119. package/dist/lib/daemon.js +1 -1
  120. package/dist/lib/daemon.js.map +1 -1
  121. package/dist/lib/goalRegistryFile.d.ts +169 -0
  122. package/dist/lib/goalRegistryFile.d.ts.map +1 -0
  123. package/dist/lib/goalRegistryFile.js +518 -0
  124. package/dist/lib/goalRegistryFile.js.map +1 -0
  125. package/dist/lib/goalsFile.d.ts +101 -0
  126. package/dist/lib/goalsFile.d.ts.map +1 -0
  127. package/dist/lib/goalsFile.js +413 -0
  128. package/dist/lib/goalsFile.js.map +1 -0
  129. package/dist/lib/handoff.d.ts +170 -0
  130. package/dist/lib/handoff.d.ts.map +1 -0
  131. package/dist/lib/handoff.js +316 -0
  132. package/dist/lib/handoff.js.map +1 -0
  133. package/dist/lib/machine-identity.d.ts +2 -0
  134. package/dist/lib/machine-identity.d.ts.map +1 -1
  135. package/dist/lib/machine-identity.js +13 -6
  136. package/dist/lib/machine-identity.js.map +1 -1
  137. package/dist/lib/onboarding.d.ts +4 -1
  138. package/dist/lib/onboarding.d.ts.map +1 -1
  139. package/dist/lib/onboarding.js +11 -3
  140. package/dist/lib/onboarding.js.map +1 -1
  141. package/dist/lib/orchestrator/loop.d.ts +7 -0
  142. package/dist/lib/orchestrator/loop.d.ts.map +1 -1
  143. package/dist/lib/orchestrator/loop.js +53 -0
  144. package/dist/lib/orchestrator/loop.js.map +1 -1
  145. package/dist/lib/orchestrator/run-journal.d.ts +178 -0
  146. package/dist/lib/orchestrator/run-journal.d.ts.map +1 -0
  147. package/dist/lib/orchestrator/run-journal.js +912 -0
  148. package/dist/lib/orchestrator/run-journal.js.map +1 -0
  149. package/dist/lib/orchestrator/supervisor.d.ts +11 -0
  150. package/dist/lib/orchestrator/supervisor.d.ts.map +1 -1
  151. package/dist/lib/orchestrator/supervisor.js +304 -116
  152. package/dist/lib/orchestrator/supervisor.js.map +1 -1
  153. package/dist/lib/orchestrator/tools.d.ts +2 -0
  154. package/dist/lib/orchestrator/tools.d.ts.map +1 -1
  155. package/dist/lib/orchestrator/tools.js +214 -1
  156. package/dist/lib/orchestrator/tools.js.map +1 -1
  157. package/dist/lib/redact.d.ts.map +1 -1
  158. package/dist/lib/redact.js +31 -6
  159. package/dist/lib/redact.js.map +1 -1
  160. package/dist/lib/remote-agent-event.d.ts +19 -0
  161. package/dist/lib/remote-agent-event.d.ts.map +1 -0
  162. package/dist/lib/remote-agent-event.js +85 -0
  163. package/dist/lib/remote-agent-event.js.map +1 -0
  164. package/dist/lib/remote-command.d.ts.map +1 -1
  165. package/dist/lib/remote-command.js +19 -0
  166. package/dist/lib/remote-command.js.map +1 -1
  167. package/dist/lib/remote-executor.d.ts +7 -1
  168. package/dist/lib/remote-executor.d.ts.map +1 -1
  169. package/dist/lib/remote-executor.js +391 -0
  170. package/dist/lib/remote-executor.js.map +1 -1
  171. package/dist/lib/sessionCheckpoint.d.ts +104 -0
  172. package/dist/lib/sessionCheckpoint.d.ts.map +1 -0
  173. package/dist/lib/sessionCheckpoint.js +191 -0
  174. package/dist/lib/sessionCheckpoint.js.map +1 -0
  175. package/dist/lib/sessionHandoff.d.ts +47 -0
  176. package/dist/lib/sessionHandoff.d.ts.map +1 -0
  177. package/dist/lib/sessionHandoff.js +305 -0
  178. package/dist/lib/sessionHandoff.js.map +1 -0
  179. package/dist/lib/stream.d.ts +3 -1
  180. package/dist/lib/stream.d.ts.map +1 -1
  181. package/dist/lib/stream.js +8 -3
  182. package/dist/lib/stream.js.map +1 -1
  183. package/dist/lib/taskLedgerProposal.d.ts +102 -0
  184. package/dist/lib/taskLedgerProposal.d.ts.map +1 -0
  185. package/dist/lib/taskLedgerProposal.js +408 -0
  186. package/dist/lib/taskLedgerProposal.js.map +1 -0
  187. package/dist/lib/tasksFile.d.ts +23 -2
  188. package/dist/lib/tasksFile.d.ts.map +1 -1
  189. package/dist/lib/tasksFile.js +122 -10
  190. package/dist/lib/tasksFile.js.map +1 -1
  191. package/dist/mcp/registry.d.ts.map +1 -1
  192. package/dist/mcp/registry.js +110 -0
  193. package/dist/mcp/registry.js.map +1 -1
  194. package/native/prebuilds/darwin-universal/youmd_safe_open.node +0 -0
  195. package/native/safe-open/youmd_safe_open.c +224 -0
  196. package/package.json +11 -3
  197. package/scripts/build-safe-open.mjs +63 -0
  198. package/scripts/skillstack-sync/com.you.context-sync.plist +1 -1
  199. package/scripts/skillstack-sync/com.you.identity-sync.plist +1 -1
  200. package/scripts/skillstack-sync/com.you.orchestrator-watch.plist +1 -1
  201. package/scripts/skillstack-sync/com.you.realtime-sync.plist +7 -1
  202. package/scripts/skillstack-sync/com.you.skillstack-sync.plist +1 -1
  203. package/scripts/skillstack-sync/context-sync.sh +19 -7
  204. package/scripts/skillstack-sync/install-daemons-linux.sh +6 -0
  205. package/scripts/smoke-safe-open-node.cjs +50 -0
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Optional repository-owned project goals contract.
3
+ *
4
+ * `project-context/goals.json` is project-scoped evidence only. It never
5
+ * projects personal/global goals and this module deliberately exposes no
6
+ * direct-write/apply primitive. Adoption and migration are exact, review-only
7
+ * replacement proposals bound to the current tasks.json bytes.
8
+ */
9
+ export declare const GOALS_SCHEMA_URL: "https://you.md/schemas/goals/v1";
10
+ export declare const GOALS_SCHEMA_VERSION: "you-md/goals/v1";
11
+ export declare const GOALS_PROPOSAL_VERSION: "you-md/goals-proposal/v1";
12
+ export declare const GOALS_REVISION_FIELDS: readonly ["$schema", "schemaVersion", "kind", "scope", "project", "projectRef", "artifactRef", "subjectRef", "owner", "authority", "writePolicy", "baseRevision", "goals", "provenance"];
13
+ export interface GoalCriterion {
14
+ id: string;
15
+ checkRef: string;
16
+ text: string;
17
+ }
18
+ export interface ProjectGoal {
19
+ id: string;
20
+ goalRef: string;
21
+ outcome: string;
22
+ criteria: GoalCriterion[];
23
+ rootTaskIds: string[];
24
+ }
25
+ export interface ProjectGoalsDocument {
26
+ $schema: typeof GOALS_SCHEMA_URL;
27
+ schemaVersion: typeof GOALS_SCHEMA_VERSION;
28
+ kind: "project-goals";
29
+ scope: "project";
30
+ project: string;
31
+ projectRef: string;
32
+ artifactRef: string;
33
+ subjectRef: string;
34
+ owner: "repository";
35
+ authority: "canonical";
36
+ writePolicy: "propose";
37
+ baseRevision: string;
38
+ goals: ProjectGoal[];
39
+ provenance: {
40
+ source: "project-context";
41
+ sourceRef: string;
42
+ sourcePath: string;
43
+ sourceRevision: string;
44
+ };
45
+ revision: {
46
+ canonicalization: "RFC8785";
47
+ hashAlgorithm: "SHA-256";
48
+ preimageFields: [...typeof GOALS_REVISION_FIELDS];
49
+ volatileExclusions: [];
50
+ digest: string;
51
+ };
52
+ }
53
+ export type GoalsFileErrorCode = "GOALS_INVALID_JSON" | "GOALS_INVALID_SCHEMA" | "GOALS_INVALID_DOCUMENT" | "GOALS_INVALID_GOAL" | "GOALS_DUPLICATE_ID" | "GOALS_UNSTABLE_REF" | "GOALS_UNSTABLE_ORDER" | "GOALS_REVISION_MISMATCH" | "GOALS_TASKS_REVISION_MISMATCH" | "GOALS_TASK_REF_MISSING" | "GOALS_TASK_GRAPH_CYCLE" | "GOALS_UNSAFE_PATH" | "GOALS_SYMLINK_REFUSED" | "GOALS_READ_FAILED" | "GOALS_SECRET_DETECTED" | "GOALS_CANARY_DETECTED";
54
+ export declare class GoalsFileError extends Error {
55
+ readonly code: GoalsFileErrorCode;
56
+ constructor(code: GoalsFileErrorCode, message: string);
57
+ }
58
+ export interface GoalsExactProposal {
59
+ schemaVersion: typeof GOALS_PROPOSAL_VERSION;
60
+ kind: "project-goals-proposal";
61
+ proposalRef: string;
62
+ projectRef: string;
63
+ status: "proposed";
64
+ authority: "review_only";
65
+ applySupported: false;
66
+ classification: "adoption" | "canonical_migration";
67
+ target: {
68
+ path: string;
69
+ exists: boolean;
70
+ owner: "repository";
71
+ authority: "canonical";
72
+ writePolicy: "propose";
73
+ baseContentHash: string;
74
+ };
75
+ source: {
76
+ tasksPath: string;
77
+ tasksRevision: string;
78
+ };
79
+ replacement: {
80
+ format: "whole_file";
81
+ content: string;
82
+ contentHash: string;
83
+ };
84
+ approval: {
85
+ required: true;
86
+ policy: "fresh_exact_replacement";
87
+ reusable: false;
88
+ bindingFields: ["proposalRef", "projectRef", "target.path", "target.baseContentHash", "source.tasksRevision", "replacement.contentHash"];
89
+ };
90
+ }
91
+ export declare function createProjectGoalsDocument(project: string, goals: ProjectGoal[], tasksContent: string): ProjectGoalsDocument;
92
+ export declare function parseProjectGoalsJson(content: string, tasksContent: string, canaries?: string[]): ProjectGoalsDocument;
93
+ export interface ProposeProjectGoalsOptions {
94
+ repoRoot: string;
95
+ document: ProjectGoalsDocument;
96
+ contextRoot?: string;
97
+ canaries?: string[];
98
+ }
99
+ /** Returns null for an exact no-op. Never creates, edits, or applies a file. */
100
+ export declare function proposeProjectGoals(options: ProposeProjectGoalsOptions): GoalsExactProposal | null;
101
+ //# sourceMappingURL=goalsFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goalsFile.d.ts","sourceRoot":"","sources":["../../src/lib/goalsFile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,413 @@
1
+ "use strict";
2
+ /**
3
+ * Optional repository-owned project goals contract.
4
+ *
5
+ * `project-context/goals.json` is project-scoped evidence only. It never
6
+ * projects personal/global goals and this module deliberately exposes no
7
+ * direct-write/apply primitive. Adoption and migration are exact, review-only
8
+ * replacement proposals bound to the current tasks.json bytes.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.GoalsFileError = exports.GOALS_REVISION_FIELDS = exports.GOALS_PROPOSAL_VERSION = exports.GOALS_SCHEMA_VERSION = exports.GOALS_SCHEMA_URL = void 0;
45
+ exports.createProjectGoalsDocument = createProjectGoalsDocument;
46
+ exports.parseProjectGoalsJson = parseProjectGoalsJson;
47
+ exports.proposeProjectGoals = proposeProjectGoals;
48
+ const fs = __importStar(require("fs"));
49
+ const canonical_1 = require("./brain/canonical");
50
+ const content_1 = require("./brain/content");
51
+ const discovery_1 = require("./brain/discovery");
52
+ const redact_1 = require("./redact");
53
+ const tasksFile_1 = require("./tasksFile");
54
+ exports.GOALS_SCHEMA_URL = "https://you.md/schemas/goals/v1";
55
+ exports.GOALS_SCHEMA_VERSION = "you-md/goals/v1";
56
+ exports.GOALS_PROPOSAL_VERSION = "you-md/goals-proposal/v1";
57
+ exports.GOALS_REVISION_FIELDS = [
58
+ "$schema", "schemaVersion", "kind", "scope", "project", "projectRef",
59
+ "artifactRef", "subjectRef", "owner", "authority", "writePolicy",
60
+ "baseRevision", "goals", "provenance",
61
+ ];
62
+ const GOAL_ID = /^g-[A-Za-z0-9][A-Za-z0-9_-]{0,94}$/;
63
+ const CRITERION_ID = /^c-[A-Za-z0-9][A-Za-z0-9_-]{0,94}$/;
64
+ const TASK_ID = /^t-[A-Za-z0-9][A-Za-z0-9_-]{0,94}$/;
65
+ const PROJECT = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/;
66
+ const MAX_GOALS_BYTES = 1024 * 1024;
67
+ const DOC_KEYS = new Set([
68
+ "$schema", "schemaVersion", "kind", "scope", "project", "projectRef",
69
+ "artifactRef", "subjectRef", "owner", "authority", "writePolicy",
70
+ "baseRevision", "goals", "provenance", "revision",
71
+ ]);
72
+ const GOAL_KEYS = new Set(["id", "goalRef", "outcome", "criteria", "rootTaskIds"]);
73
+ const CRITERION_KEYS = new Set(["id", "checkRef", "text"]);
74
+ const PROVENANCE_KEYS = new Set(["source", "sourceRef", "sourcePath", "sourceRevision"]);
75
+ const REVISION_KEYS = new Set(["canonicalization", "hashAlgorithm", "preimageFields", "volatileExclusions", "digest"]);
76
+ class GoalsFileError extends Error {
77
+ constructor(code, message) {
78
+ super(`${code}: ${message}`);
79
+ this.code = code;
80
+ this.name = "GoalsFileError";
81
+ }
82
+ }
83
+ exports.GoalsFileError = GoalsFileError;
84
+ function isRecord(value) {
85
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
86
+ }
87
+ function assertKeys(value, allowed, where, code) {
88
+ const unknown = Object.keys(value).filter((key) => !allowed.has(key)).sort();
89
+ if (unknown.length)
90
+ throw new GoalsFileError(code, `${where} contains unknown fields: ${unknown.join(", ")}`);
91
+ }
92
+ function text(value, max, where) {
93
+ if (typeof value !== "string" || !value.trim() || value.length > max
94
+ || /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/.test(value)) {
95
+ throw new GoalsFileError("GOALS_INVALID_GOAL", `${where} is invalid`);
96
+ }
97
+ return value;
98
+ }
99
+ function compareText(a, b) { return a < b ? -1 : a > b ? 1 : 0; }
100
+ function digestText(content) { return `sha256:${(0, canonical_1.sha256)(content)}`; }
101
+ function safePayload(value, canaries) {
102
+ const serialized = typeof value === "string" ? value : JSON.stringify(value);
103
+ const redactionInput = serialized.replace(/\b(?:sha256|goal|task):(?:[a-z0-9-]+\/)?[a-f0-9]{64}\b/g, "[OPAQUE_HASH]");
104
+ if ((0, redact_1.redactText)(redactionInput).hits > 0)
105
+ throw new GoalsFileError("GOALS_SECRET_DETECTED", "goal evidence contains a secret or private-data pattern");
106
+ if (canaries.some((canary) => Boolean(canary) && serialized.includes(canary))) {
107
+ throw new GoalsFileError("GOALS_CANARY_DETECTED", "goal evidence contains a persistence canary");
108
+ }
109
+ }
110
+ function taskRef(project, taskId) { return `task:${project}/${taskId}`; }
111
+ function goalRef(project, goalId) { return `goal:${project}/${goalId}`; }
112
+ function validateTaskGraph(tasks) {
113
+ const byId = new Map(tasks.map((task) => [task.id, task]));
114
+ for (const task of tasks) {
115
+ for (const referenced of [task.parentId, ...(task.dependencyIds || [])].filter((id) => Boolean(id))) {
116
+ if (!byId.has(referenced))
117
+ throw new GoalsFileError("GOALS_TASK_REF_MISSING", `task ${task.id} references missing task ${referenced}`);
118
+ }
119
+ }
120
+ const state = new Map();
121
+ const visit = (id, trail) => {
122
+ const current = state.get(id) || 0;
123
+ if (current === 2)
124
+ return;
125
+ if (current === 1) {
126
+ const start = trail.indexOf(id);
127
+ const cycle = [...trail.slice(Math.max(0, start)), id];
128
+ throw new GoalsFileError("GOALS_TASK_GRAPH_CYCLE", `task graph cycle: ${cycle.join(" -> ")}`);
129
+ }
130
+ state.set(id, 1);
131
+ const task = byId.get(id);
132
+ const edges = [task.parentId, ...(task.dependencyIds || [])]
133
+ .filter((edge) => Boolean(edge))
134
+ .sort(compareText);
135
+ for (const edge of edges)
136
+ visit(edge, [...trail, id]);
137
+ state.set(id, 2);
138
+ };
139
+ for (const id of [...byId.keys()].sort(compareText))
140
+ visit(id, []);
141
+ }
142
+ function tasksDocument(content, expectedProject) {
143
+ let raw;
144
+ try {
145
+ raw = JSON.parse(content);
146
+ }
147
+ catch {
148
+ raw = null;
149
+ }
150
+ if (isRecord(raw) && Array.isArray(raw.tasks)) {
151
+ const ids = raw.tasks.filter(isRecord).map((task) => task.id).filter((id) => typeof id === "string");
152
+ if (new Set(ids).size !== ids.length)
153
+ throw new GoalsFileError("GOALS_DUPLICATE_ID", "tasks.json contains duplicate task ids");
154
+ for (const task of raw.tasks.filter(isRecord)) {
155
+ if (typeof task.id !== "string")
156
+ continue;
157
+ if (task.parentId === task.id || (Array.isArray(task.dependencyIds) && task.dependencyIds.includes(task.id))) {
158
+ throw new GoalsFileError("GOALS_TASK_GRAPH_CYCLE", `task graph self-cycle: ${task.id}`);
159
+ }
160
+ }
161
+ }
162
+ let doc;
163
+ try {
164
+ doc = (0, tasksFile_1.parseTasksJson)(content, expectedProject);
165
+ }
166
+ catch (error) {
167
+ if (error instanceof tasksFile_1.TasksFileError && (error.code === "TASKS_DUPLICATE_ID" || /must be unique/.test(error.message))) {
168
+ throw new GoalsFileError("GOALS_DUPLICATE_ID", "tasks.json contains duplicate relationship ids");
169
+ }
170
+ throw new GoalsFileError("GOALS_INVALID_DOCUMENT", error instanceof Error ? `tasks.json is invalid: ${error.message}` : "tasks.json is invalid");
171
+ }
172
+ validateTaskGraph(doc.tasks);
173
+ return { doc, revision: digestText(content) };
174
+ }
175
+ function normalizedGoals(goals, project, tasks) {
176
+ if (!Array.isArray(goals) || goals.length > 1000)
177
+ throw new GoalsFileError("GOALS_INVALID_DOCUMENT", "goals must be an array with at most 1000 entries");
178
+ const taskIds = new Set(tasks.tasks.map((task) => task.id));
179
+ const goalIds = new Set();
180
+ const criterionIds = new Set();
181
+ const parsed = [];
182
+ for (const [goalIndex, candidate] of goals.entries()) {
183
+ if (!isRecord(candidate))
184
+ throw new GoalsFileError("GOALS_INVALID_GOAL", `goals[${goalIndex}] must be an object`);
185
+ assertKeys(candidate, GOAL_KEYS, `goals[${goalIndex}]`, "GOALS_INVALID_GOAL");
186
+ if (typeof candidate.id !== "string" || !GOAL_ID.test(candidate.id))
187
+ throw new GoalsFileError("GOALS_INVALID_GOAL", `goals[${goalIndex}].id is invalid`);
188
+ if (goalIds.has(candidate.id))
189
+ throw new GoalsFileError("GOALS_DUPLICATE_ID", `duplicate goal id ${candidate.id}`);
190
+ goalIds.add(candidate.id);
191
+ const expectedGoalRef = goalRef(project, candidate.id);
192
+ if (candidate.goalRef !== expectedGoalRef)
193
+ throw new GoalsFileError("GOALS_UNSTABLE_REF", `goals[${goalIndex}].goalRef must equal ${expectedGoalRef}`);
194
+ const outcome = text(candidate.outcome, 10000, `goals[${goalIndex}].outcome`);
195
+ if (!Array.isArray(candidate.criteria) || candidate.criteria.length === 0 || candidate.criteria.length > 256) {
196
+ throw new GoalsFileError("GOALS_INVALID_GOAL", `goals[${goalIndex}].criteria must contain between 1 and 256 measurable checks`);
197
+ }
198
+ const criteria = [];
199
+ for (const [criterionIndex, rawCriterion] of candidate.criteria.entries()) {
200
+ if (!isRecord(rawCriterion))
201
+ throw new GoalsFileError("GOALS_INVALID_GOAL", `goals[${goalIndex}].criteria[${criterionIndex}] must be an object`);
202
+ assertKeys(rawCriterion, CRITERION_KEYS, `goals[${goalIndex}].criteria[${criterionIndex}]`, "GOALS_INVALID_GOAL");
203
+ if (typeof rawCriterion.id !== "string" || !CRITERION_ID.test(rawCriterion.id))
204
+ throw new GoalsFileError("GOALS_INVALID_GOAL", `criterion id is invalid`);
205
+ if (criterionIds.has(rawCriterion.id))
206
+ throw new GoalsFileError("GOALS_DUPLICATE_ID", `duplicate criterion id ${rawCriterion.id}`);
207
+ criterionIds.add(rawCriterion.id);
208
+ if (typeof rawCriterion.checkRef !== "string" || !rawCriterion.checkRef.startsWith(`task:${project}/`)) {
209
+ throw new GoalsFileError("GOALS_UNSTABLE_REF", `criterion ${rawCriterion.id} checkRef must be a task:${project}/ reference`);
210
+ }
211
+ const checkedTaskId = rawCriterion.checkRef.slice(`task:${project}/`.length);
212
+ if (!TASK_ID.test(checkedTaskId))
213
+ throw new GoalsFileError("GOALS_UNSTABLE_REF", `criterion ${rawCriterion.id} checkRef is invalid`);
214
+ if (!taskIds.has(checkedTaskId))
215
+ throw new GoalsFileError("GOALS_TASK_REF_MISSING", `criterion ${rawCriterion.id} references missing task ${checkedTaskId}`);
216
+ criteria.push({ id: rawCriterion.id, checkRef: taskRef(project, checkedTaskId), text: text(rawCriterion.text, 4000, `criterion ${rawCriterion.id}.text`) });
217
+ }
218
+ criteria.sort((a, b) => compareText(a.id, b.id));
219
+ if (!Array.isArray(candidate.rootTaskIds) || candidate.rootTaskIds.length === 0 || candidate.rootTaskIds.length > 256
220
+ || candidate.rootTaskIds.some((id) => typeof id !== "string" || !TASK_ID.test(id))) {
221
+ throw new GoalsFileError("GOALS_INVALID_GOAL", `goals[${goalIndex}].rootTaskIds are invalid`);
222
+ }
223
+ if (new Set(candidate.rootTaskIds).size !== candidate.rootTaskIds.length)
224
+ throw new GoalsFileError("GOALS_DUPLICATE_ID", `goal ${candidate.id} contains duplicate rootTaskIds`);
225
+ const rootTaskIds = [...candidate.rootTaskIds];
226
+ for (const id of rootTaskIds)
227
+ if (!taskIds.has(id))
228
+ throw new GoalsFileError("GOALS_TASK_REF_MISSING", `goal ${candidate.id} references missing root task ${id}`);
229
+ rootTaskIds.sort(compareText);
230
+ parsed.push({ id: candidate.id, goalRef: expectedGoalRef, outcome, criteria, rootTaskIds });
231
+ }
232
+ return parsed.sort((a, b) => compareText(a.goalRef, b.goalRef));
233
+ }
234
+ function revisionPreimage(document) {
235
+ return Object.fromEntries(exports.GOALS_REVISION_FIELDS.map((field) => [field, document[field]]));
236
+ }
237
+ function seal(document) {
238
+ const digest = `sha256:${(0, canonical_1.sha256)((0, canonical_1.canonicalize)(revisionPreimage(document)))}`;
239
+ return {
240
+ ...document,
241
+ revision: {
242
+ canonicalization: "RFC8785",
243
+ hashAlgorithm: "SHA-256",
244
+ preimageFields: [...exports.GOALS_REVISION_FIELDS],
245
+ volatileExclusions: [],
246
+ digest,
247
+ },
248
+ };
249
+ }
250
+ function createProjectGoalsDocument(project, goals, tasksContent) {
251
+ if (!PROJECT.test(project))
252
+ throw new GoalsFileError("GOALS_INVALID_DOCUMENT", "project must be a stable lowercase project slug");
253
+ const tasks = tasksDocument(tasksContent, project);
254
+ const sourceRef = `subject:repository/${project}/goals`;
255
+ return seal({
256
+ $schema: exports.GOALS_SCHEMA_URL,
257
+ schemaVersion: exports.GOALS_SCHEMA_VERSION,
258
+ kind: "project-goals",
259
+ scope: "project",
260
+ project,
261
+ projectRef: `project:${project}`,
262
+ artifactRef: `artifact:${project}/goals`,
263
+ subjectRef: sourceRef,
264
+ owner: "repository",
265
+ authority: "canonical",
266
+ writePolicy: "propose",
267
+ baseRevision: tasks.revision,
268
+ goals: normalizedGoals(goals, project, tasks.doc),
269
+ provenance: {
270
+ source: "project-context",
271
+ sourceRef,
272
+ sourcePath: "project-context/goals.json",
273
+ sourceRevision: tasks.revision,
274
+ },
275
+ });
276
+ }
277
+ function parseProjectGoalsJson(content, tasksContent, canaries = []) {
278
+ safePayload(content, canaries);
279
+ let raw;
280
+ try {
281
+ raw = JSON.parse(content);
282
+ }
283
+ catch {
284
+ throw new GoalsFileError("GOALS_INVALID_JSON", "goals.json is not valid JSON");
285
+ }
286
+ if (!isRecord(raw))
287
+ throw new GoalsFileError("GOALS_INVALID_DOCUMENT", "goals.json must be an object");
288
+ assertKeys(raw, DOC_KEYS, "goals.json", "GOALS_INVALID_DOCUMENT");
289
+ if (raw.$schema !== exports.GOALS_SCHEMA_URL || raw.schemaVersion !== exports.GOALS_SCHEMA_VERSION || raw.kind !== "project-goals") {
290
+ throw new GoalsFileError("GOALS_INVALID_SCHEMA", `expected ${exports.GOALS_SCHEMA_VERSION}`);
291
+ }
292
+ if (raw.scope !== "project" || raw.owner !== "repository" || raw.authority !== "canonical" || raw.writePolicy !== "propose") {
293
+ throw new GoalsFileError("GOALS_INVALID_DOCUMENT", "goals.json is repository-owned project scope and proposal-only; personal/global projection is forbidden");
294
+ }
295
+ if (typeof raw.project !== "string" || !PROJECT.test(raw.project))
296
+ throw new GoalsFileError("GOALS_INVALID_DOCUMENT", "project is invalid");
297
+ const project = raw.project;
298
+ const sourceRef = `subject:repository/${project}/goals`;
299
+ if (raw.projectRef !== `project:${project}` || raw.artifactRef !== `artifact:${project}/goals` || raw.subjectRef !== sourceRef) {
300
+ throw new GoalsFileError("GOALS_UNSTABLE_REF", "document refs do not match the project slug");
301
+ }
302
+ const tasks = tasksDocument(tasksContent, project);
303
+ if (raw.baseRevision !== tasks.revision)
304
+ throw new GoalsFileError("GOALS_TASKS_REVISION_MISMATCH", "baseRevision does not match exact tasks.json bytes");
305
+ if (!isRecord(raw.provenance))
306
+ throw new GoalsFileError("GOALS_INVALID_DOCUMENT", "provenance is invalid");
307
+ assertKeys(raw.provenance, PROVENANCE_KEYS, "provenance", "GOALS_INVALID_DOCUMENT");
308
+ if (raw.provenance.source !== "project-context" || raw.provenance.sourceRef !== sourceRef
309
+ || raw.provenance.sourcePath !== "project-context/goals.json" || raw.provenance.sourceRevision !== tasks.revision) {
310
+ throw new GoalsFileError("GOALS_INVALID_DOCUMENT", "provenance does not match repository ownership and the tasks base revision");
311
+ }
312
+ const goals = normalizedGoals(raw.goals, project, tasks.doc);
313
+ if ((0, canonical_1.canonicalize)(raw.goals) !== (0, canonical_1.canonicalize)(goals))
314
+ throw new GoalsFileError("GOALS_UNSTABLE_ORDER", "goals, criteria, and rootTaskIds must use stable ordering");
315
+ const withoutRevision = {
316
+ $schema: exports.GOALS_SCHEMA_URL,
317
+ schemaVersion: exports.GOALS_SCHEMA_VERSION,
318
+ kind: "project-goals",
319
+ scope: "project",
320
+ project,
321
+ projectRef: `project:${project}`,
322
+ artifactRef: `artifact:${project}/goals`,
323
+ subjectRef: sourceRef,
324
+ owner: "repository",
325
+ authority: "canonical",
326
+ writePolicy: "propose",
327
+ baseRevision: tasks.revision,
328
+ goals,
329
+ provenance: {
330
+ source: "project-context",
331
+ sourceRef,
332
+ sourcePath: "project-context/goals.json",
333
+ sourceRevision: tasks.revision,
334
+ },
335
+ };
336
+ if (!isRecord(raw.revision))
337
+ throw new GoalsFileError("GOALS_REVISION_MISMATCH", "revision is missing");
338
+ assertKeys(raw.revision, REVISION_KEYS, "revision", "GOALS_REVISION_MISMATCH");
339
+ const expected = seal(withoutRevision);
340
+ if (raw.revision.canonicalization !== "RFC8785" || raw.revision.hashAlgorithm !== "SHA-256"
341
+ || (0, canonical_1.canonicalize)(raw.revision.preimageFields) !== (0, canonical_1.canonicalize)(exports.GOALS_REVISION_FIELDS)
342
+ || (0, canonical_1.canonicalize)(raw.revision.volatileExclusions) !== "[]"
343
+ || raw.revision.digest !== expected.revision.digest) {
344
+ throw new GoalsFileError("GOALS_REVISION_MISMATCH", "revision does not match canonical goal evidence");
345
+ }
346
+ return expected;
347
+ }
348
+ function safeReadRepoFile(repoRootValue, relative, required) {
349
+ if (!(0, discovery_1.isSafeRelativePath)(relative))
350
+ throw new GoalsFileError("GOALS_UNSAFE_PATH", `${relative} is not a safe repository-relative path`);
351
+ try {
352
+ const canonicalRoot = fs.realpathSync.native(repoRootValue);
353
+ return (0, content_1.verifiedProjectBrainUtf8Read)(canonicalRoot, relative, relative.split("/").slice(0, -1).join("/"), MAX_GOALS_BYTES).content;
354
+ }
355
+ catch (error) {
356
+ const osCode = error.code;
357
+ const reason = error instanceof Error ? error.message : "unreadable";
358
+ if (!required && osCode === "ENOENT")
359
+ return null;
360
+ if (reason === "symlink_rejected" || osCode === "ELOOP")
361
+ throw new GoalsFileError("GOALS_SYMLINK_REFUSED", `${relative} crosses a symlink`);
362
+ if (reason === "unsafe_path")
363
+ throw new GoalsFileError("GOALS_UNSAFE_PATH", `${relative} is unsafe`);
364
+ throw new GoalsFileError("GOALS_READ_FAILED", `${relative} verified read failed: ${reason}`);
365
+ }
366
+ }
367
+ /** Returns null for an exact no-op. Never creates, edits, or applies a file. */
368
+ function proposeProjectGoals(options) {
369
+ const contextRoot = options.contextRoot || "project-context";
370
+ if (!(0, discovery_1.isSafeRelativePath)(contextRoot))
371
+ throw new GoalsFileError("GOALS_UNSAFE_PATH", "contextRoot is unsafe");
372
+ const tasksPath = `${contextRoot}/tasks.json`;
373
+ const goalsPath = `${contextRoot}/goals.json`;
374
+ const tasksContent = safeReadRepoFile(options.repoRoot, tasksPath, true);
375
+ const existingContent = safeReadRepoFile(options.repoRoot, goalsPath, false);
376
+ safePayload(tasksContent, options.canaries || []);
377
+ safePayload(options.document, options.canaries || []);
378
+ const candidate = parseProjectGoalsJson(JSON.stringify(options.document), tasksContent, options.canaries || []);
379
+ if (candidate.provenance.sourcePath !== goalsPath) {
380
+ throw new GoalsFileError("GOALS_UNSAFE_PATH", `document provenance path must equal ${goalsPath}`);
381
+ }
382
+ const replacement = `${JSON.stringify(candidate, null, 2)}\n`;
383
+ safePayload(replacement, options.canaries || []);
384
+ if (existingContent === replacement)
385
+ return null;
386
+ const withoutRef = {
387
+ schemaVersion: exports.GOALS_PROPOSAL_VERSION,
388
+ kind: "project-goals-proposal",
389
+ projectRef: candidate.projectRef,
390
+ status: "proposed",
391
+ authority: "review_only",
392
+ applySupported: false,
393
+ classification: existingContent === null ? "adoption" : "canonical_migration",
394
+ target: {
395
+ path: goalsPath,
396
+ exists: existingContent !== null,
397
+ owner: "repository",
398
+ authority: "canonical",
399
+ writePolicy: "propose",
400
+ baseContentHash: digestText(existingContent || ""),
401
+ },
402
+ source: { tasksPath, tasksRevision: digestText(tasksContent) },
403
+ replacement: { format: "whole_file", content: replacement, contentHash: digestText(replacement) },
404
+ approval: {
405
+ required: true,
406
+ policy: "fresh_exact_replacement",
407
+ reusable: false,
408
+ bindingFields: ["proposalRef", "projectRef", "target.path", "target.baseContentHash", "source.tasksRevision", "replacement.contentHash"],
409
+ },
410
+ };
411
+ return { ...withoutRef, proposalRef: `proposal:goals/${(0, canonical_1.sha256)((0, canonical_1.canonicalize)(withoutRef))}` };
412
+ }
413
+ //# sourceMappingURL=goalsFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goalsFile.js","sourceRoot":"","sources":["../../src/lib/goalsFile.ts"],"names":[],"mappings":"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"}