youmd 0.11.0 → 0.13.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 (216) hide show
  1. package/dist/commands/brain.d.ts.map +1 -1
  2. package/dist/commands/brain.js +77 -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/connect.d.ts +113 -0
  8. package/dist/commands/connect.d.ts.map +1 -0
  9. package/dist/commands/connect.js +849 -0
  10. package/dist/commands/connect.js.map +1 -0
  11. package/dist/commands/conversations.d.ts +5 -0
  12. package/dist/commands/conversations.d.ts.map +1 -0
  13. package/dist/commands/conversations.js +116 -0
  14. package/dist/commands/conversations.js.map +1 -0
  15. package/dist/commands/founder.d.ts +16 -0
  16. package/dist/commands/founder.d.ts.map +1 -0
  17. package/dist/commands/founder.js +446 -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/sync.d.ts.map +1 -1
  39. package/dist/commands/sync.js +11 -0
  40. package/dist/commands/sync.js.map +1 -1
  41. package/dist/commands/tasks.d.ts +20 -0
  42. package/dist/commands/tasks.d.ts.map +1 -1
  43. package/dist/commands/tasks.js +90 -19
  44. package/dist/commands/tasks.js.map +1 -1
  45. package/dist/generated/capability-registry.d.ts +444 -76
  46. package/dist/generated/capability-registry.d.ts.map +1 -1
  47. package/dist/generated/capability-registry.js +497 -76
  48. package/dist/generated/capability-registry.js.map +1 -1
  49. package/dist/index.js +122 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/lib/api.d.ts +393 -2
  52. package/dist/lib/api.d.ts.map +1 -1
  53. package/dist/lib/api.js +195 -2
  54. package/dist/lib/api.js.map +1 -1
  55. package/dist/lib/brain/adapters.d.ts +22 -1
  56. package/dist/lib/brain/adapters.d.ts.map +1 -1
  57. package/dist/lib/brain/adapters.js +184 -2
  58. package/dist/lib/brain/adapters.js.map +1 -1
  59. package/dist/lib/brain/approval-key-trust.d.ts +29 -0
  60. package/dist/lib/brain/approval-key-trust.d.ts.map +1 -0
  61. package/dist/lib/brain/approval-key-trust.js +139 -0
  62. package/dist/lib/brain/approval-key-trust.js.map +1 -0
  63. package/dist/lib/brain/content.d.ts +10 -3
  64. package/dist/lib/brain/content.d.ts.map +1 -1
  65. package/dist/lib/brain/content.js +133 -30
  66. package/dist/lib/brain/content.js.map +1 -1
  67. package/dist/lib/brain/descriptor-validator.d.ts +11 -0
  68. package/dist/lib/brain/descriptor-validator.d.ts.map +1 -0
  69. package/dist/lib/brain/descriptor-validator.js +185 -0
  70. package/dist/lib/brain/descriptor-validator.js.map +1 -0
  71. package/dist/lib/brain/discovery.d.ts.map +1 -1
  72. package/dist/lib/brain/discovery.js +77 -50
  73. package/dist/lib/brain/discovery.js.map +1 -1
  74. package/dist/lib/brain/index.d.ts +2 -0
  75. package/dist/lib/brain/index.d.ts.map +1 -1
  76. package/dist/lib/brain/index.js +14 -4
  77. package/dist/lib/brain/index.js.map +1 -1
  78. package/dist/lib/brain/proposal.d.ts +53 -5
  79. package/dist/lib/brain/proposal.d.ts.map +1 -1
  80. package/dist/lib/brain/proposal.js +330 -94
  81. package/dist/lib/brain/proposal.js.map +1 -1
  82. package/dist/lib/brain/safe-file.d.ts +25 -1
  83. package/dist/lib/brain/safe-file.d.ts.map +1 -1
  84. package/dist/lib/brain/safe-file.js +250 -30
  85. package/dist/lib/brain/safe-file.js.map +1 -1
  86. package/dist/lib/brain/safety.d.ts.map +1 -1
  87. package/dist/lib/brain/safety.js +5 -0
  88. package/dist/lib/brain/safety.js.map +1 -1
  89. package/dist/lib/brain/staged-apply.d.ts +2 -1
  90. package/dist/lib/brain/staged-apply.d.ts.map +1 -1
  91. package/dist/lib/brain/staged-apply.js +6 -3
  92. package/dist/lib/brain/staged-apply.js.map +1 -1
  93. package/dist/lib/brain/store.d.ts +3 -0
  94. package/dist/lib/brain/store.d.ts.map +1 -1
  95. package/dist/lib/brain/store.js +68 -0
  96. package/dist/lib/brain/store.js.map +1 -1
  97. package/dist/lib/brain/sync.d.ts +48 -0
  98. package/dist/lib/brain/sync.d.ts.map +1 -1
  99. package/dist/lib/brain/sync.js +102 -0
  100. package/dist/lib/brain/sync.js.map +1 -1
  101. package/dist/lib/brain/types.d.ts +23 -0
  102. package/dist/lib/brain/types.d.ts.map +1 -1
  103. package/dist/lib/brain/vision.d.ts +35 -0
  104. package/dist/lib/brain/vision.d.ts.map +1 -0
  105. package/dist/lib/brain/vision.js +65 -0
  106. package/dist/lib/brain/vision.js.map +1 -0
  107. package/dist/lib/businessScaffold.d.ts +42 -0
  108. package/dist/lib/businessScaffold.d.ts.map +1 -0
  109. package/dist/lib/businessScaffold.js +150 -0
  110. package/dist/lib/businessScaffold.js.map +1 -0
  111. package/dist/lib/codex-device-auth.d.ts +94 -0
  112. package/dist/lib/codex-device-auth.d.ts.map +1 -0
  113. package/dist/lib/codex-device-auth.js +295 -0
  114. package/dist/lib/codex-device-auth.js.map +1 -0
  115. package/dist/lib/codex-job-control-plane.d.ts +67 -0
  116. package/dist/lib/codex-job-control-plane.d.ts.map +1 -0
  117. package/dist/lib/codex-job-control-plane.js +105 -0
  118. package/dist/lib/codex-job-control-plane.js.map +1 -0
  119. package/dist/lib/codex-readonly-job.d.ts +76 -0
  120. package/dist/lib/codex-readonly-job.d.ts.map +1 -0
  121. package/dist/lib/codex-readonly-job.js +196 -0
  122. package/dist/lib/codex-readonly-job.js.map +1 -0
  123. package/dist/lib/config.d.ts +7 -0
  124. package/dist/lib/config.d.ts.map +1 -1
  125. package/dist/lib/config.js +3 -0
  126. package/dist/lib/config.js.map +1 -1
  127. package/dist/lib/connected-access-native.d.ts +111 -0
  128. package/dist/lib/connected-access-native.d.ts.map +1 -0
  129. package/dist/lib/connected-access-native.js +403 -0
  130. package/dist/lib/connected-access-native.js.map +1 -0
  131. package/dist/lib/connected-context.d.ts +82 -0
  132. package/dist/lib/connected-context.d.ts.map +1 -0
  133. package/dist/lib/connected-context.js +610 -0
  134. package/dist/lib/connected-context.js.map +1 -0
  135. package/dist/lib/goalRegistryFile.d.ts +169 -0
  136. package/dist/lib/goalRegistryFile.d.ts.map +1 -0
  137. package/dist/lib/goalRegistryFile.js +518 -0
  138. package/dist/lib/goalRegistryFile.js.map +1 -0
  139. package/dist/lib/goalsFile.d.ts +101 -0
  140. package/dist/lib/goalsFile.d.ts.map +1 -0
  141. package/dist/lib/goalsFile.js +413 -0
  142. package/dist/lib/goalsFile.js.map +1 -0
  143. package/dist/lib/handoff.d.ts +170 -0
  144. package/dist/lib/handoff.d.ts.map +1 -0
  145. package/dist/lib/handoff.js +316 -0
  146. package/dist/lib/handoff.js.map +1 -0
  147. package/dist/lib/machine-identity.d.ts +2 -0
  148. package/dist/lib/machine-identity.d.ts.map +1 -1
  149. package/dist/lib/machine-identity.js +13 -6
  150. package/dist/lib/machine-identity.js.map +1 -1
  151. package/dist/lib/onboarding.d.ts +4 -1
  152. package/dist/lib/onboarding.d.ts.map +1 -1
  153. package/dist/lib/onboarding.js +11 -3
  154. package/dist/lib/onboarding.js.map +1 -1
  155. package/dist/lib/orchestrator/loop.d.ts.map +1 -1
  156. package/dist/lib/orchestrator/loop.js +8 -3
  157. package/dist/lib/orchestrator/loop.js.map +1 -1
  158. package/dist/lib/orchestrator/run-journal.d.ts +68 -3
  159. package/dist/lib/orchestrator/run-journal.d.ts.map +1 -1
  160. package/dist/lib/orchestrator/run-journal.js +391 -37
  161. package/dist/lib/orchestrator/run-journal.js.map +1 -1
  162. package/dist/lib/orchestrator/supervisor.d.ts +11 -0
  163. package/dist/lib/orchestrator/supervisor.d.ts.map +1 -1
  164. package/dist/lib/orchestrator/supervisor.js +304 -116
  165. package/dist/lib/orchestrator/supervisor.js.map +1 -1
  166. package/dist/lib/orchestrator/tools.d.ts.map +1 -1
  167. package/dist/lib/orchestrator/tools.js +76 -3
  168. package/dist/lib/orchestrator/tools.js.map +1 -1
  169. package/dist/lib/redact.d.ts.map +1 -1
  170. package/dist/lib/redact.js +40 -7
  171. package/dist/lib/redact.js.map +1 -1
  172. package/dist/lib/remote-agent-event.d.ts +19 -0
  173. package/dist/lib/remote-agent-event.d.ts.map +1 -0
  174. package/dist/lib/remote-agent-event.js +85 -0
  175. package/dist/lib/remote-agent-event.js.map +1 -0
  176. package/dist/lib/remote-command.d.ts.map +1 -1
  177. package/dist/lib/remote-command.js +19 -0
  178. package/dist/lib/remote-command.js.map +1 -1
  179. package/dist/lib/remote-executor.d.ts +7 -1
  180. package/dist/lib/remote-executor.d.ts.map +1 -1
  181. package/dist/lib/remote-executor.js +391 -0
  182. package/dist/lib/remote-executor.js.map +1 -1
  183. package/dist/lib/sessionCheckpoint.d.ts +104 -0
  184. package/dist/lib/sessionCheckpoint.d.ts.map +1 -0
  185. package/dist/lib/sessionCheckpoint.js +191 -0
  186. package/dist/lib/sessionCheckpoint.js.map +1 -0
  187. package/dist/lib/sessionHandoff.d.ts +47 -0
  188. package/dist/lib/sessionHandoff.d.ts.map +1 -0
  189. package/dist/lib/sessionHandoff.js +305 -0
  190. package/dist/lib/sessionHandoff.js.map +1 -0
  191. package/dist/lib/stream.d.ts +3 -1
  192. package/dist/lib/stream.d.ts.map +1 -1
  193. package/dist/lib/stream.js +8 -3
  194. package/dist/lib/stream.js.map +1 -1
  195. package/dist/lib/taskLedgerProposal.d.ts +2 -2
  196. package/dist/lib/taskLedgerProposal.d.ts.map +1 -1
  197. package/dist/lib/taskLedgerProposal.js +16 -8
  198. package/dist/lib/taskLedgerProposal.js.map +1 -1
  199. package/dist/lib/tasksFile.d.ts +14 -2
  200. package/dist/lib/tasksFile.d.ts.map +1 -1
  201. package/dist/lib/tasksFile.js +39 -5
  202. package/dist/lib/tasksFile.js.map +1 -1
  203. package/dist/mcp/registry.d.ts +4 -1
  204. package/dist/mcp/registry.d.ts.map +1 -1
  205. package/dist/mcp/registry.js +230 -1
  206. package/dist/mcp/registry.js.map +1 -1
  207. package/dist/mcp/server.d.ts +1 -1
  208. package/dist/mcp/server.d.ts.map +1 -1
  209. package/dist/mcp/server.js +18 -9
  210. package/dist/mcp/server.js.map +1 -1
  211. package/native/prebuilds/darwin-universal/youmd_safe_open.node +0 -0
  212. package/package.json +4 -2
  213. package/scripts/env-vault/README.md +16 -20
  214. package/scripts/env-vault/backup.sh +22 -57
  215. package/scripts/env-vault/restore.sh +18 -96
  216. package/scripts/smoke-safe-open-node.cjs +50 -0
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROJECT_VISION_INDEX_VERSION = void 0;
4
+ exports.projectVisionIndexFromSnapshot = projectVisionIndexFromSnapshot;
5
+ exports.PROJECT_VISION_INDEX_VERSION = "you-md/project-vision-index/v1";
6
+ const PROJECT_VISION_DIRECTORIES = new Set(["reviews", "artifacts"]);
7
+ function stemFor(file) { return file.replace(/\.[^.]+$/, "").split("/").pop() || file; }
8
+ function formatFor(file) {
9
+ if (/\.html?$/i.test(file))
10
+ return "html";
11
+ if (/\.md$/i.test(file))
12
+ return "markdown";
13
+ if (/\.json$/i.test(file))
14
+ return "json";
15
+ return null;
16
+ }
17
+ function metadata(stem) {
18
+ const normalized = stem.toLowerCase();
19
+ const date = normalized.match(/(?:^|[^0-9])((?:20)\d{2}-\d{2}-\d{2})(?:$|[^0-9])/)?.[1] || null;
20
+ const horizon = /(?:year|annual)/.test(normalized) ? "year"
21
+ : /quarter|\bq[1-4]\b/.test(normalized) ? "quarter"
22
+ : /month|monthly/.test(normalized) ? "month"
23
+ : /week|weekly/.test(normalized) ? "week" : null;
24
+ const family = /north[-_ ]?star/.test(normalized) ? "north-star"
25
+ : /vision/.test(normalized) ? "vision"
26
+ : /strategy|positioning/.test(normalized) ? "strategy" : "planning";
27
+ const classifiedFamily = /audit|report/.test(normalized) ? "audit"
28
+ : /brain/.test(normalized) ? "project-brain" : family;
29
+ return { title: stem.replace(/[-_]+/g, " "), date, horizon, family: classifiedFamily };
30
+ }
31
+ function eligible(artifact, contextRoot) {
32
+ if (!/(?:vision|north[-_ ]?star|brain|strategy|positioning|roadmap|plan|audit|report|brief|annual|quarterly|monthly|weekly)/i.test(stemFor(artifact.path)))
33
+ return false;
34
+ const normalized = artifact.path.toLowerCase().replace(/^\.\//, "");
35
+ const root = contextRoot.toLowerCase().replace(/^\.\//, "");
36
+ if (!normalized.startsWith(`${root}/`))
37
+ return false;
38
+ const within = normalized.slice(root.length + 1).split("/");
39
+ return within.length === 1 || (within.length === 2 && PROJECT_VISION_DIRECTORIES.has(within[0]));
40
+ }
41
+ /** Pure, path-only projection. It never reads artifact bodies or invents content. */
42
+ function projectVisionIndexFromSnapshot(snapshot, readiness, revision) {
43
+ const artifacts = new Map();
44
+ for (const project of snapshot?.projects || []) {
45
+ for (const artifact of project.artifacts.filter((candidate) => eligible(candidate, project.contextRoot))) {
46
+ const stem = stemFor(artifact.path);
47
+ const key = `${project.projectRef}\0${stem}`;
48
+ const current = artifacts.get(key) || {
49
+ artifactRef: artifact.artifactRef, projectRef: project.projectRef, stem, ...metadata(stem),
50
+ formats: { html: null, markdown: null, json: null }, provenance: artifact.provenance,
51
+ };
52
+ const format = formatFor(artifact.path);
53
+ if (format && current.formats[format] === null)
54
+ current.formats[format] = artifact.path;
55
+ artifacts.set(key, current);
56
+ }
57
+ }
58
+ return {
59
+ schemaVersion: exports.PROJECT_VISION_INDEX_VERSION, kind: "project-vision-index",
60
+ projectRef: snapshot?.projects[0]?.projectRef || null, workspaceRef: snapshot?.workspaceRef || null,
61
+ revision: revision || snapshot?.revision.digest || null, readiness,
62
+ artifacts: [...artifacts.values()].sort((a, b) => a.projectRef.localeCompare(b.projectRef) || a.stem.localeCompare(b.stem)),
63
+ };
64
+ }
65
+ //# sourceMappingURL=vision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision.js","sourceRoot":"","sources":["../../../src/lib/brain/vision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export declare const BUSINESS_MD_FILENAME = "BUSINESS.md";
2
+ export declare const MANAGED_BLOCK_START = "<!-- you.md:business:managed:start -->";
3
+ export declare const MANAGED_BLOCK_END = "<!-- you.md:business:managed:end -->";
4
+ export interface BusinessScaffoldProject {
5
+ slug: string;
6
+ name?: string | null;
7
+ weeklyFocus?: string | null;
8
+ weeklyIntent?: string | null;
9
+ repoFullName?: string | null;
10
+ }
11
+ export interface BusinessScaffoldInput {
12
+ slug: string;
13
+ name: string;
14
+ tagline?: string | null;
15
+ stage?: string | null;
16
+ mission?: string | null;
17
+ revenueLine?: string | null;
18
+ projects?: BusinessScaffoldProject[];
19
+ ungroupedNote?: string | null;
20
+ }
21
+ /**
22
+ * Render the managed block deterministically: same input, same bytes. No
23
+ * timestamps — churn-free re-runs let the daemon regenerate on every sync
24
+ * without dirtying repositories that have not actually changed.
25
+ */
26
+ export declare function renderBusinessManagedBlock(input: BusinessScaffoldInput): string;
27
+ /**
28
+ * Merge the managed block into existing file content. A file without markers
29
+ * keeps ALL of its current content below the new block (never destroys
30
+ * hand-written context); a file with markers gets only the block replaced.
31
+ */
32
+ export declare function mergeBusinessMd(existing: string | null, managedBlock: string): string;
33
+ export interface ScaffoldWriteResult {
34
+ filePath: string;
35
+ action: "created" | "updated" | "unchanged";
36
+ }
37
+ /**
38
+ * Write (or refresh) BUSINESS.md at the given repo root. Returns what actually
39
+ * happened so callers can report honestly and daemons can skip no-op commits.
40
+ */
41
+ export declare function writeBusinessMd(repoRoot: string, input: BusinessScaffoldInput): ScaffoldWriteResult;
42
+ //# sourceMappingURL=businessScaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"businessScaffold.d.ts","sourceRoot":"","sources":["../../src/lib/businessScaffold.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,mBAAmB,2CAA2C,CAAC;AAC5E,eAAO,MAAM,iBAAiB,yCAAyC,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAiBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CA2C/E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAarF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;CAC7C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,qBAAqB,GAC3B,mBAAmB,CAUrB"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MANAGED_BLOCK_END = exports.MANAGED_BLOCK_START = exports.BUSINESS_MD_FILENAME = void 0;
37
+ exports.renderBusinessManagedBlock = renderBusinessManagedBlock;
38
+ exports.mergeBusinessMd = mergeBusinessMd;
39
+ exports.writeBusinessMd = writeBusinessMd;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ // Business root context scaffold (request 176): every business gets its own
43
+ // you.md-style context file at the root of its root repo, so any agent opening
44
+ // that repo starts warm on the BUSINESS (not just the repo). The file has a
45
+ // managed block regenerated from hosted Founder OS data; everything below the
46
+ // end marker is owner territory and survives every re-run.
47
+ exports.BUSINESS_MD_FILENAME = "BUSINESS.md";
48
+ exports.MANAGED_BLOCK_START = "<!-- you.md:business:managed:start -->";
49
+ exports.MANAGED_BLOCK_END = "<!-- you.md:business:managed:end -->";
50
+ const STAGE_LABELS = {
51
+ idea: "idea",
52
+ building: "building",
53
+ free_beta: "free beta",
54
+ paid_beta: "paid beta",
55
+ launched: "launched",
56
+ paused: "paused",
57
+ };
58
+ function clean(value) {
59
+ if (typeof value !== "string")
60
+ return undefined;
61
+ const cleaned = value.replace(/\s+/g, " ").trim();
62
+ return cleaned || undefined;
63
+ }
64
+ /**
65
+ * Render the managed block deterministically: same input, same bytes. No
66
+ * timestamps — churn-free re-runs let the daemon regenerate on every sync
67
+ * without dirtying repositories that have not actually changed.
68
+ */
69
+ function renderBusinessManagedBlock(input) {
70
+ const lines = [];
71
+ lines.push(exports.MANAGED_BLOCK_START);
72
+ lines.push(`# ${clean(input.name) ?? input.slug}`);
73
+ lines.push("");
74
+ const tagline = clean(input.tagline);
75
+ if (tagline) {
76
+ lines.push(tagline);
77
+ lines.push("");
78
+ }
79
+ const stage = clean(input.stage)?.toLowerCase();
80
+ lines.push(`- **Business:** \`${input.slug}\` (you.md Founder OS)`);
81
+ if (stage)
82
+ lines.push(`- **Stage:** ${STAGE_LABELS[stage] ?? stage}`);
83
+ const revenue = clean(input.revenueLine);
84
+ if (revenue)
85
+ lines.push(`- **Revenue:** ${revenue}`);
86
+ const mission = clean(input.mission);
87
+ if (mission)
88
+ lines.push(`- **Mission:** ${mission}`);
89
+ lines.push("");
90
+ const projects = (input.projects ?? []).filter((project) => clean(project.slug));
91
+ if (projects.length > 0) {
92
+ lines.push("## Projects");
93
+ lines.push("");
94
+ for (const project of projects) {
95
+ const label = clean(project.name) ?? project.slug;
96
+ const repo = clean(project.repoFullName);
97
+ const focus = project.weeklyFocus === "focus"
98
+ ? clean(project.weeklyIntent)
99
+ ? ` — this week: ${clean(project.weeklyIntent)}`
100
+ : " — this week: focus"
101
+ : "";
102
+ lines.push(`- \`${project.slug}\`${label !== project.slug ? ` (${label})` : ""}${repo ? ` — ${repo}` : ""}${focus}`);
103
+ }
104
+ lines.push("");
105
+ }
106
+ const note = clean(input.ungroupedNote);
107
+ if (note) {
108
+ lines.push(`> ${note}`);
109
+ lines.push("");
110
+ }
111
+ lines.push("Managed by you.md — everything above this marker is regenerated from the");
112
+ lines.push("Founder OS; add anything you like below it and it will be preserved.");
113
+ lines.push(exports.MANAGED_BLOCK_END);
114
+ return lines.join("\n");
115
+ }
116
+ /**
117
+ * Merge the managed block into existing file content. A file without markers
118
+ * keeps ALL of its current content below the new block (never destroys
119
+ * hand-written context); a file with markers gets only the block replaced.
120
+ */
121
+ function mergeBusinessMd(existing, managedBlock) {
122
+ if (!existing || !existing.trim()) {
123
+ return managedBlock + "\n";
124
+ }
125
+ const startIdx = existing.indexOf(exports.MANAGED_BLOCK_START);
126
+ const endIdx = existing.indexOf(exports.MANAGED_BLOCK_END);
127
+ if (startIdx >= 0 && endIdx > startIdx) {
128
+ const before = existing.slice(0, startIdx);
129
+ const after = existing.slice(endIdx + exports.MANAGED_BLOCK_END.length);
130
+ return before + managedBlock + after;
131
+ }
132
+ // Existing content without markers: keep it, prepend the managed block.
133
+ return managedBlock + "\n\n" + existing.replace(/^\n+/, "");
134
+ }
135
+ /**
136
+ * Write (or refresh) BUSINESS.md at the given repo root. Returns what actually
137
+ * happened so callers can report honestly and daemons can skip no-op commits.
138
+ */
139
+ function writeBusinessMd(repoRoot, input) {
140
+ const filePath = path.join(repoRoot, exports.BUSINESS_MD_FILENAME);
141
+ const managedBlock = renderBusinessManagedBlock(input);
142
+ const existing = fs.existsSync(filePath) ? fs.readFileSync(filePath, "utf8") : null;
143
+ const next = mergeBusinessMd(existing, managedBlock);
144
+ if (existing !== null && existing === next) {
145
+ return { filePath, action: "unchanged" };
146
+ }
147
+ fs.writeFileSync(filePath, next);
148
+ return { filePath, action: existing === null ? "created" : "updated" };
149
+ }
150
+ //# sourceMappingURL=businessScaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"businessScaffold.js","sourceRoot":"","sources":["../../src/lib/businessScaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { type ChildProcess } from "child_process";
2
+ import * as fs from "fs";
3
+ /**
4
+ * The ChatGPT desktop bundle supplies the supported local Codex executable on
5
+ * this macOS adapter surface. This M3 adapter accepts only the exact sealed
6
+ * macOS bundle; it intentionally does not use PATH/npm/Homebrew candidates.
7
+ */
8
+ export declare const CODEX_EXECUTABLE = "/Applications/ChatGPT.app/Contents/Resources/codex";
9
+ export declare const CODEX_STATUS_ARGS: readonly ["login", "status"];
10
+ export declare const CODEX_DEVICE_AUTH_ARGS: readonly ["login", "--device-auth"];
11
+ export declare const CODEX_STATUS_MAX_OUTPUT_BYTES = 1024;
12
+ export declare const CODEX_STATUS_TIMEOUT_MS = 5000;
13
+ /** OpenAI's device flow has a long human approval window; leave margin. */
14
+ export declare const CODEX_LOGIN_TIMEOUT_MS: number;
15
+ export declare const CODEX_LOGIN_KILL_GRACE_MS = 3000;
16
+ export type CodexAuthenticationKind = "chatgpt" | "api_key" | "signed_out" | "unknown" | "unavailable";
17
+ export type CodexStatusReport = {
18
+ schemaVersion: "you-md/openai-codex-local-status/v1";
19
+ target: "openai_codex";
20
+ source: "codex_login_status";
21
+ authenticationKind: CodexAuthenticationKind;
22
+ authenticated: boolean;
23
+ providerCredentialsRead: false;
24
+ deviceCodeCaptured: false;
25
+ };
26
+ export type CodexStatusRunRequest = {
27
+ executable: string;
28
+ argv: readonly ["login", "status"];
29
+ shell: false;
30
+ stdio: ["ignore", "pipe", "pipe"];
31
+ timeoutMs: number;
32
+ };
33
+ export type CodexLoginRunRequest = {
34
+ executable: string;
35
+ argv: readonly ["login", "--device-auth"];
36
+ shell: false;
37
+ /** Interactive provider UI/code stay on the user's terminal only. */
38
+ stdio: "inherit";
39
+ timeoutMs: number;
40
+ };
41
+ /** Bounded status streams; raw contents are classified then immediately discarded. */
42
+ export type CodexStatusRunResult = {
43
+ exitCode: number | null;
44
+ stdout: Buffer;
45
+ stderr?: Buffer;
46
+ timedOut?: boolean;
47
+ };
48
+ export type CodexLoginRunResult = {
49
+ exitCode: number | null;
50
+ cancelled?: boolean;
51
+ timedOut?: boolean;
52
+ };
53
+ export type CodexDeviceAuthDeps = {
54
+ runStatus?: (request: CodexStatusRunRequest) => Promise<CodexStatusRunResult>;
55
+ runLogin?: (request: CodexLoginRunRequest) => Promise<CodexLoginRunResult>;
56
+ /** Test-only resolver seam; there is no CLI/config executable override. */
57
+ resolveExecutable?: () => string | null;
58
+ };
59
+ export type CodexExecutableResolutionDeps = {
60
+ realpathSync?: typeof fs.realpathSync;
61
+ lstatSync?: typeof fs.lstatSync;
62
+ validateBundle?: (bundlePath: string) => boolean;
63
+ };
64
+ /** Validate code signature and designated OpenAI app identity; never CDHash-pin. */
65
+ export declare function validateOfficialChatGPTBundle(bundlePath?: string): boolean;
66
+ /**
67
+ * Resolve only the exact sealed ChatGPT bundle resource after validating the
68
+ * app's Apple/OpenAI designated requirement. No PATH, alias, config value, or
69
+ * caller-selected executable is part of this auth boundary.
70
+ */
71
+ export declare function resolveTrustedCodexExecutable(deps?: CodexExecutableResolutionDeps): string | null;
72
+ /**
73
+ * Intentionally exact matching. Never relay status output: if a future CLI
74
+ * prints a device URL, token, path, or arbitrary diagnostic, it becomes the
75
+ * safe `unknown` enum rather than data that You.md retains or uploads.
76
+ */
77
+ export declare function classifyCodexLoginStatusStreams(stdout: Buffer, stderr: Buffer, exitCode: number | null): CodexStatusReport;
78
+ /** Capture bounded status streams, classify them, then discard their raw bytes. */
79
+ export declare function runCodexLoginStatus(request: CodexStatusRunRequest): Promise<CodexStatusRunResult>;
80
+ /**
81
+ * Start an official interactive device-login flow without intercepting either
82
+ * stdout or stderr. The device code and callback URL never enter this process.
83
+ */
84
+ /** Send TERM first and force KILL only if a local child resists. */
85
+ export declare function terminateCodexChild(child: Pick<ChildProcess, "kill">, complete: () => void, graceMs?: number): NodeJS.Timeout;
86
+ export declare function runCodexDeviceAuth(request: CodexLoginRunRequest): Promise<CodexLoginRunResult>;
87
+ export declare function getCodexAuthenticationStatus(deps?: CodexDeviceAuthDeps): Promise<CodexStatusReport>;
88
+ export type CodexLoginOutcome = {
89
+ status: CodexStatusReport;
90
+ loginChildRan: boolean;
91
+ providerStateChanged: boolean;
92
+ };
93
+ export declare function ensureCodexAuthentication(deps?: CodexDeviceAuthDeps): Promise<CodexLoginOutcome>;
94
+ //# sourceMappingURL=codex-device-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-device-auth.d.ts","sourceRoot":"","sources":["../../src/lib/codex-device-auth.ts"],"names":[],"mappings":"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"}