@neurcode-ai/cli 0.12.0 → 0.15.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 (212) hide show
  1. package/README.md +60 -8
  2. package/dist/api-client.d.ts +284 -0
  3. package/dist/api-client.d.ts.map +1 -1
  4. package/dist/api-client.js +111 -0
  5. package/dist/api-client.js.map +1 -1
  6. package/dist/commands/activate.d.ts +82 -0
  7. package/dist/commands/activate.d.ts.map +1 -0
  8. package/dist/commands/activate.js +551 -0
  9. package/dist/commands/activate.js.map +1 -0
  10. package/dist/commands/admission.d.ts +67 -0
  11. package/dist/commands/admission.d.ts.map +1 -0
  12. package/dist/commands/admission.js +350 -0
  13. package/dist/commands/admission.js.map +1 -0
  14. package/dist/commands/agent.d.ts +3 -0
  15. package/dist/commands/agent.d.ts.map +1 -0
  16. package/dist/commands/agent.js +2045 -0
  17. package/dist/commands/agent.js.map +1 -0
  18. package/dist/commands/demo.d.ts +3 -0
  19. package/dist/commands/demo.d.ts.map +1 -0
  20. package/dist/commands/demo.js +102 -0
  21. package/dist/commands/demo.js.map +1 -0
  22. package/dist/commands/governance.d.ts.map +1 -1
  23. package/dist/commands/governance.js +12 -0
  24. package/dist/commands/governance.js.map +1 -1
  25. package/dist/commands/home.d.ts +21 -0
  26. package/dist/commands/home.d.ts.map +1 -0
  27. package/dist/commands/home.js +253 -0
  28. package/dist/commands/home.js.map +1 -0
  29. package/dist/commands/init.d.ts.map +1 -1
  30. package/dist/commands/init.js +58 -44
  31. package/dist/commands/init.js.map +1 -1
  32. package/dist/commands/login.d.ts +1 -1
  33. package/dist/commands/login.d.ts.map +1 -1
  34. package/dist/commands/login.js +44 -22
  35. package/dist/commands/login.js.map +1 -1
  36. package/dist/commands/profile.d.ts +14 -0
  37. package/dist/commands/profile.d.ts.map +1 -0
  38. package/dist/commands/profile.js +118 -0
  39. package/dist/commands/profile.js.map +1 -0
  40. package/dist/commands/quickstart.d.ts +2 -2
  41. package/dist/commands/quickstart.d.ts.map +1 -1
  42. package/dist/commands/quickstart.js +33 -30
  43. package/dist/commands/quickstart.js.map +1 -1
  44. package/dist/commands/remediate-export.d.ts +6 -1
  45. package/dist/commands/remediate-export.d.ts.map +1 -1
  46. package/dist/commands/remediate-export.js +375 -8
  47. package/dist/commands/remediate-export.js.map +1 -1
  48. package/dist/commands/replay.d.ts.map +1 -1
  49. package/dist/commands/replay.js +84 -0
  50. package/dist/commands/replay.js.map +1 -1
  51. package/dist/commands/run.d.ts +3 -0
  52. package/dist/commands/run.d.ts.map +1 -0
  53. package/dist/commands/run.js +98 -0
  54. package/dist/commands/run.js.map +1 -0
  55. package/dist/commands/runtime-adapter.d.ts +8 -0
  56. package/dist/commands/runtime-adapter.d.ts.map +1 -0
  57. package/dist/commands/runtime-adapter.js +375 -0
  58. package/dist/commands/runtime-adapter.js.map +1 -0
  59. package/dist/commands/runtime-doctor.d.ts +6 -0
  60. package/dist/commands/runtime-doctor.d.ts.map +1 -0
  61. package/dist/commands/runtime-doctor.js +478 -0
  62. package/dist/commands/runtime-doctor.js.map +1 -0
  63. package/dist/commands/runtime-report.d.ts +13 -0
  64. package/dist/commands/runtime-report.d.ts.map +1 -0
  65. package/dist/commands/runtime-report.js +81 -0
  66. package/dist/commands/runtime-report.js.map +1 -0
  67. package/dist/commands/runtime-sync.d.ts +17 -0
  68. package/dist/commands/runtime-sync.d.ts.map +1 -0
  69. package/dist/commands/runtime-sync.js +656 -0
  70. package/dist/commands/runtime-sync.js.map +1 -0
  71. package/dist/commands/runtime.d.ts +16 -0
  72. package/dist/commands/runtime.d.ts.map +1 -0
  73. package/dist/commands/runtime.js +380 -0
  74. package/dist/commands/runtime.js.map +1 -0
  75. package/dist/commands/session-hook.d.ts +35 -0
  76. package/dist/commands/session-hook.d.ts.map +1 -0
  77. package/dist/commands/session-hook.js +1297 -0
  78. package/dist/commands/session-hook.js.map +1 -0
  79. package/dist/commands/session.d.ts +91 -0
  80. package/dist/commands/session.d.ts.map +1 -1
  81. package/dist/commands/session.js +1226 -0
  82. package/dist/commands/session.js.map +1 -1
  83. package/dist/commands/verify-output.d.ts.map +1 -1
  84. package/dist/commands/verify-output.js +22 -0
  85. package/dist/commands/verify-output.js.map +1 -1
  86. package/dist/commands/verify.d.ts.map +1 -1
  87. package/dist/commands/verify.js +21 -3
  88. package/dist/commands/verify.js.map +1 -1
  89. package/dist/commands/whoami.d.ts +7 -4
  90. package/dist/commands/whoami.d.ts.map +1 -1
  91. package/dist/commands/whoami.js +59 -34
  92. package/dist/commands/whoami.js.map +1 -1
  93. package/dist/config.d.ts.map +1 -1
  94. package/dist/config.js +24 -5
  95. package/dist/config.js.map +1 -1
  96. package/dist/daemon/routes.d.ts.map +1 -1
  97. package/dist/daemon/routes.js +8 -0
  98. package/dist/daemon/routes.js.map +1 -1
  99. package/dist/daemon/server.d.ts.map +1 -1
  100. package/dist/daemon/server.js +88 -0
  101. package/dist/daemon/server.js.map +1 -1
  102. package/dist/governance/canonical-pipeline.d.ts.map +1 -1
  103. package/dist/governance/canonical-pipeline.js +29 -3
  104. package/dist/governance/canonical-pipeline.js.map +1 -1
  105. package/dist/governance/impact-analysis.d.ts +27 -0
  106. package/dist/governance/impact-analysis.d.ts.map +1 -0
  107. package/dist/governance/impact-analysis.js +274 -0
  108. package/dist/governance/impact-analysis.js.map +1 -0
  109. package/dist/index.js +484 -29
  110. package/dist/index.js.map +1 -1
  111. package/dist/intent-engine/matcher.d.ts.map +1 -1
  112. package/dist/intent-engine/matcher.js +3 -12
  113. package/dist/intent-engine/matcher.js.map +1 -1
  114. package/dist/utils/admission-artifact.d.ts +59 -0
  115. package/dist/utils/admission-artifact.d.ts.map +1 -0
  116. package/dist/utils/admission-artifact.js +410 -0
  117. package/dist/utils/admission-artifact.js.map +1 -0
  118. package/dist/utils/agent-adapter-setup.d.ts +80 -0
  119. package/dist/utils/agent-adapter-setup.d.ts.map +1 -0
  120. package/dist/utils/agent-adapter-setup.js +577 -0
  121. package/dist/utils/agent-adapter-setup.js.map +1 -0
  122. package/dist/utils/agent-guard-supervisor.d.ts +75 -0
  123. package/dist/utils/agent-guard-supervisor.d.ts.map +1 -0
  124. package/dist/utils/agent-guard-supervisor.js +388 -0
  125. package/dist/utils/agent-guard-supervisor.js.map +1 -0
  126. package/dist/utils/agent-guard.d.ts +92 -0
  127. package/dist/utils/agent-guard.d.ts.map +1 -0
  128. package/dist/utils/agent-guard.js +326 -0
  129. package/dist/utils/agent-guard.js.map +1 -0
  130. package/dist/utils/agent-session-launcher.d.ts +89 -0
  131. package/dist/utils/agent-session-launcher.d.ts.map +1 -0
  132. package/dist/utils/agent-session-launcher.js +308 -0
  133. package/dist/utils/agent-session-launcher.js.map +1 -0
  134. package/dist/utils/bash-command-analysis.d.ts +19 -0
  135. package/dist/utils/bash-command-analysis.d.ts.map +1 -0
  136. package/dist/utils/bash-command-analysis.js +295 -0
  137. package/dist/utils/bash-command-analysis.js.map +1 -0
  138. package/dist/utils/consequence-nudges.d.ts +30 -0
  139. package/dist/utils/consequence-nudges.d.ts.map +1 -0
  140. package/dist/utils/consequence-nudges.js +313 -0
  141. package/dist/utils/consequence-nudges.js.map +1 -0
  142. package/dist/utils/drift-intelligence.d.ts.map +1 -1
  143. package/dist/utils/drift-intelligence.js +29 -7
  144. package/dist/utils/drift-intelligence.js.map +1 -1
  145. package/dist/utils/git-coverage.d.ts +57 -0
  146. package/dist/utils/git-coverage.d.ts.map +1 -0
  147. package/dist/utils/git-coverage.js +302 -0
  148. package/dist/utils/git-coverage.js.map +1 -0
  149. package/dist/utils/gitignore.d.ts.map +1 -1
  150. package/dist/utils/gitignore.js +2 -1
  151. package/dist/utils/gitignore.js.map +1 -1
  152. package/dist/utils/governed-intent.d.ts +10 -0
  153. package/dist/utils/governed-intent.d.ts.map +1 -0
  154. package/dist/utils/governed-intent.js +108 -0
  155. package/dist/utils/governed-intent.js.map +1 -0
  156. package/dist/utils/hook-heartbeat.d.ts +55 -0
  157. package/dist/utils/hook-heartbeat.d.ts.map +1 -0
  158. package/dist/utils/hook-heartbeat.js +116 -0
  159. package/dist/utils/hook-heartbeat.js.map +1 -0
  160. package/dist/utils/intent-continuity.d.ts +21 -0
  161. package/dist/utils/intent-continuity.d.ts.map +1 -0
  162. package/dist/utils/intent-continuity.js +192 -0
  163. package/dist/utils/intent-continuity.js.map +1 -0
  164. package/dist/utils/messages.d.ts +1 -1
  165. package/dist/utils/messages.d.ts.map +1 -1
  166. package/dist/utils/messages.js +35 -23
  167. package/dist/utils/messages.js.map +1 -1
  168. package/dist/utils/runtime-companion.d.ts +137 -0
  169. package/dist/utils/runtime-companion.d.ts.map +1 -0
  170. package/dist/utils/runtime-companion.js +231 -0
  171. package/dist/utils/runtime-companion.js.map +1 -0
  172. package/dist/utils/runtime-connection.d.ts +46 -0
  173. package/dist/utils/runtime-connection.d.ts.map +1 -0
  174. package/dist/utils/runtime-connection.js +148 -0
  175. package/dist/utils/runtime-connection.js.map +1 -0
  176. package/dist/utils/runtime-evidence.d.ts +68 -0
  177. package/dist/utils/runtime-evidence.d.ts.map +1 -0
  178. package/dist/utils/runtime-evidence.js +248 -0
  179. package/dist/utils/runtime-evidence.js.map +1 -0
  180. package/dist/utils/runtime-live.d.ts +33 -0
  181. package/dist/utils/runtime-live.d.ts.map +1 -0
  182. package/dist/utils/runtime-live.js +361 -0
  183. package/dist/utils/runtime-live.js.map +1 -0
  184. package/dist/utils/runtime-outbox.d.ts +76 -0
  185. package/dist/utils/runtime-outbox.d.ts.map +1 -0
  186. package/dist/utils/runtime-outbox.js +410 -0
  187. package/dist/utils/runtime-outbox.js.map +1 -0
  188. package/dist/utils/runtime-receipt.d.ts +50 -0
  189. package/dist/utils/runtime-receipt.d.ts.map +1 -0
  190. package/dist/utils/runtime-receipt.js +223 -0
  191. package/dist/utils/runtime-receipt.js.map +1 -0
  192. package/dist/utils/runtime-state.d.ts +44 -0
  193. package/dist/utils/runtime-state.d.ts.map +1 -0
  194. package/dist/utils/runtime-state.js +151 -0
  195. package/dist/utils/runtime-state.js.map +1 -0
  196. package/dist/utils/state.d.ts +21 -0
  197. package/dist/utils/state.d.ts.map +1 -1
  198. package/dist/utils/state.js +30 -0
  199. package/dist/utils/state.js.map +1 -1
  200. package/dist/utils/structural-understanding.d.ts +334 -0
  201. package/dist/utils/structural-understanding.d.ts.map +1 -0
  202. package/dist/utils/structural-understanding.js +2316 -0
  203. package/dist/utils/structural-understanding.js.map +1 -0
  204. package/dist/utils/v0-governance.d.ts +197 -0
  205. package/dist/utils/v0-governance.d.ts.map +1 -0
  206. package/dist/utils/v0-governance.js +904 -0
  207. package/dist/utils/v0-governance.js.map +1 -0
  208. package/package.json +6 -6
  209. package/dist/utils/box.d.ts +0 -16
  210. package/dist/utils/box.d.ts.map +0 -1
  211. package/dist/utils/box.js +0 -85
  212. package/dist/utils/box.js.map +0 -1
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RUNTIME_BACKEND_RECEIPT_SCHEMA_VERSION = void 0;
4
+ exports.canonicalStringify = canonicalStringify;
5
+ exports.canonicalHash = canonicalHash;
6
+ exports.extractRuntimeReceiptArtifacts = extractRuntimeReceiptArtifacts;
7
+ exports.verifyRuntimeBackendEvidenceReceipt = verifyRuntimeBackendEvidenceReceipt;
8
+ const node_crypto_1 = require("node:crypto");
9
+ exports.RUNTIME_BACKEND_RECEIPT_SCHEMA_VERSION = 'neurcode.backend-evidence-receipt.v1';
10
+ const SOURCE_LIKE_KEYS = new Set([
11
+ 'content',
12
+ 'filecontent',
13
+ 'file_content',
14
+ 'sourcetext',
15
+ 'source_text',
16
+ 'sourcecode',
17
+ 'source_code',
18
+ 'diff',
19
+ 'difftext',
20
+ 'diff_text',
21
+ 'patch',
22
+ 'before',
23
+ 'after',
24
+ 'promptwithsource',
25
+ 'prompt_with_source',
26
+ ]);
27
+ function asRecord(value) {
28
+ return value && typeof value === 'object' && !Array.isArray(value)
29
+ ? value
30
+ : null;
31
+ }
32
+ function canonicalize(value) {
33
+ if (value === undefined)
34
+ return null;
35
+ if (value === null || typeof value === 'string' || typeof value === 'boolean')
36
+ return value;
37
+ if (typeof value === 'number')
38
+ return Number.isFinite(value) ? value : null;
39
+ if (Array.isArray(value))
40
+ return value.map((entry) => canonicalize(entry));
41
+ const record = asRecord(value);
42
+ if (!record)
43
+ return String(value);
44
+ const output = {};
45
+ for (const key of Object.keys(record).sort()) {
46
+ const child = record[key];
47
+ if (child !== undefined)
48
+ output[key] = canonicalize(child);
49
+ }
50
+ return output;
51
+ }
52
+ function canonicalStringify(value) {
53
+ return JSON.stringify(canonicalize(value));
54
+ }
55
+ function canonicalHash(value, length = 32) {
56
+ return (0, node_crypto_1.createHash)('sha256').update(canonicalStringify(value)).digest('hex').slice(0, length);
57
+ }
58
+ function assertSourceFreeRuntimeReceipt(value, path = 'receipt') {
59
+ if (Array.isArray(value)) {
60
+ value.forEach((entry, index) => assertSourceFreeRuntimeReceipt(entry, `${path}[${index}]`));
61
+ return;
62
+ }
63
+ const record = asRecord(value);
64
+ if (!record)
65
+ return;
66
+ for (const [key, child] of Object.entries(record)) {
67
+ const normalizedKey = key.toLowerCase().replace(/[^a-z0-9_]/g, '');
68
+ const compactKey = normalizedKey.replace(/_/g, '');
69
+ if (SOURCE_LIKE_KEYS.has(normalizedKey) || SOURCE_LIKE_KEYS.has(compactKey)) {
70
+ throw new Error(`source-like receipt payload key is not allowed: ${path}.${key}`);
71
+ }
72
+ assertSourceFreeRuntimeReceipt(child, `${path}.${key}`);
73
+ }
74
+ }
75
+ function signingSecret() {
76
+ return typeof process.env.NEURCODE_RECEIPT_SIGNING_SECRET === 'string'
77
+ ? process.env.NEURCODE_RECEIPT_SIGNING_SECRET.trim()
78
+ : '';
79
+ }
80
+ function hmacSha256(secret, payload) {
81
+ return (0, node_crypto_1.createHmac)('sha256', secret).update(payload).digest('hex');
82
+ }
83
+ function safeEqualHex(left, right) {
84
+ if (!/^[a-f0-9]+$/i.test(left) || !/^[a-f0-9]+$/i.test(right))
85
+ return false;
86
+ const leftBuffer = Buffer.from(left, 'hex');
87
+ const rightBuffer = Buffer.from(right, 'hex');
88
+ return leftBuffer.length === rightBuffer.length && (0, node_crypto_1.timingSafeEqual)(leftBuffer, rightBuffer);
89
+ }
90
+ function looksLikeReceipt(value) {
91
+ const record = asRecord(value);
92
+ return record?.schemaVersion === exports.RUNTIME_BACKEND_RECEIPT_SCHEMA_VERSION
93
+ && typeof record.receiptId === 'string'
94
+ && typeof record.recordHash === 'string'
95
+ && typeof record.canonicalHash === 'string'
96
+ && typeof record.receiptHash === 'string';
97
+ }
98
+ function signedPayload(receipt) {
99
+ return {
100
+ schemaVersion: receipt.schemaVersion,
101
+ receiptId: receipt.receiptId,
102
+ issuer: receipt.issuer,
103
+ issuedAt: receipt.issuedAt,
104
+ organizationId: receipt.organizationId,
105
+ repoId: receipt.repoId ?? null,
106
+ repoKey: receipt.repoKey ?? null,
107
+ sessionId: receipt.sessionId,
108
+ recordHash: receipt.recordHash,
109
+ replayHash: receipt.replayHash ?? null,
110
+ evidenceHash: receipt.evidenceHash,
111
+ policyEvidenceVersion: receipt.policyEvidenceVersion,
112
+ sourceFree: receipt.sourceFree,
113
+ sessionSummary: receipt.sessionSummary,
114
+ };
115
+ }
116
+ function extractRuntimeReceiptArtifacts(value) {
117
+ const receipts = [];
118
+ function visit(candidate, path) {
119
+ if (looksLikeReceipt(candidate)) {
120
+ receipts.push({ path, receipt: candidate });
121
+ return;
122
+ }
123
+ const record = asRecord(candidate);
124
+ if (!record)
125
+ return;
126
+ if (looksLikeReceipt(record.backendReceipt)) {
127
+ receipts.push({ path: `${path}.backendReceipt`, receipt: record.backendReceipt });
128
+ }
129
+ if (looksLikeReceipt(record.receipt)) {
130
+ receipts.push({ path: `${path}.receipt`, receipt: record.receipt });
131
+ }
132
+ if (Array.isArray(record.receipts)) {
133
+ record.receipts.forEach((entry, index) => {
134
+ if (looksLikeReceipt(entry))
135
+ receipts.push({ path: `${path}.receipts[${index}]`, receipt: entry });
136
+ });
137
+ }
138
+ }
139
+ visit(value, '$');
140
+ return receipts;
141
+ }
142
+ function verifyRuntimeBackendEvidenceReceipt(value) {
143
+ const receipt = asRecord(value);
144
+ const reasons = [];
145
+ if (!receipt) {
146
+ return {
147
+ valid: false,
148
+ status: 'tampered',
149
+ receiptId: null,
150
+ canonicalHash: null,
151
+ receiptHash: null,
152
+ signatureStatus: 'unknown',
153
+ signingKeyId: null,
154
+ sourceFree: false,
155
+ checks: { canonicalHash: false, receiptHash: false, signature: false, sourceFree: false },
156
+ reasons: ['receipt must be an object'],
157
+ };
158
+ }
159
+ let sourceFree = true;
160
+ try {
161
+ assertSourceFreeRuntimeReceipt(receipt);
162
+ }
163
+ catch (error) {
164
+ sourceFree = false;
165
+ reasons.push(error instanceof Error ? error.message : String(error));
166
+ }
167
+ const candidate = signedPayload(receipt);
168
+ const expectedCanonicalHash = canonicalHash(candidate);
169
+ const canonicalHashValid = receipt.canonicalHash === expectedCanonicalHash;
170
+ if (!canonicalHashValid)
171
+ reasons.push('canonical hash mismatch');
172
+ const expectedReceiptHash = canonicalHash({
173
+ ...candidate,
174
+ canonicalHash: receipt.canonicalHash,
175
+ signatureStatus: receipt.signatureStatus,
176
+ signingKeyId: receipt.signingKeyId ?? null,
177
+ signatureAlgorithm: receipt.signatureAlgorithm,
178
+ signature: receipt.signature ?? null,
179
+ });
180
+ const receiptHashValid = receipt.receiptHash === expectedReceiptHash;
181
+ if (!receiptHashValid)
182
+ reasons.push('receipt hash mismatch');
183
+ let signatureValid = false;
184
+ const secret = signingSecret();
185
+ if (receipt.signatureStatus !== 'signed' || !receipt.signature) {
186
+ reasons.push('receipt is unsigned');
187
+ }
188
+ else if (!secret) {
189
+ reasons.push('NEURCODE_RECEIPT_SIGNING_SECRET is not configured for verification');
190
+ }
191
+ else {
192
+ const expectedSignature = hmacSha256(secret, canonicalStringify(candidate));
193
+ signatureValid = safeEqualHex(receipt.signature, expectedSignature);
194
+ if (!signatureValid)
195
+ reasons.push('signature mismatch');
196
+ }
197
+ const valid = sourceFree && canonicalHashValid && receiptHashValid && signatureValid;
198
+ const status = valid
199
+ ? 'valid'
200
+ : receipt.signatureStatus !== 'signed'
201
+ ? 'unsigned'
202
+ : !secret
203
+ ? 'unverifiable'
204
+ : 'tampered';
205
+ return {
206
+ valid,
207
+ status,
208
+ receiptId: typeof receipt.receiptId === 'string' ? receipt.receiptId : null,
209
+ canonicalHash: typeof receipt.canonicalHash === 'string' ? receipt.canonicalHash : null,
210
+ receiptHash: typeof receipt.receiptHash === 'string' ? receipt.receiptHash : null,
211
+ signatureStatus: typeof receipt.signatureStatus === 'string' ? receipt.signatureStatus : 'unknown',
212
+ signingKeyId: typeof receipt.signingKeyId === 'string' ? receipt.signingKeyId : null,
213
+ sourceFree,
214
+ checks: {
215
+ canonicalHash: canonicalHashValid,
216
+ receiptHash: receiptHashValid,
217
+ signature: signatureValid,
218
+ sourceFree,
219
+ },
220
+ reasons,
221
+ };
222
+ }
223
+ //# sourceMappingURL=runtime-receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-receipt.js","sourceRoot":"","sources":["../../src/utils/runtime-receipt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Runtime state guardrails.
3
+ *
4
+ * Detects the operational state of a project root and produces structured
5
+ * "what's next" guidance when a command would otherwise fail with a raw
6
+ * runtime / git / filesystem error.
7
+ *
8
+ * Pure, deterministic, no network. Read-only. No mutations to .neurcode/
9
+ * or any other on-disk state.
10
+ *
11
+ * Aesthetic discipline: subtle sophistication, no terminal theatrics.
12
+ * Aligned with the operational-experience refabrication phase
13
+ * (docs/ux/final-operational-experience-report.md).
14
+ */
15
+ export type RuntimeStateIssue = 'not-a-git-repo' | 'no-head-commit' | 'no-neurcode-dir' | 'no-intent-pack';
16
+ export interface RuntimeStateSnapshot {
17
+ projectRoot: string;
18
+ isGitRepo: boolean;
19
+ hasHeadCommit: boolean;
20
+ hasNeurcodeDir: boolean;
21
+ hasIntentPack: boolean;
22
+ hasLastVerifyOutput: boolean;
23
+ }
24
+ export declare function detectRuntimeState(projectRoot: string): RuntimeStateSnapshot;
25
+ /**
26
+ * Render an operational-guidance panel when a command cannot run because
27
+ * a prerequisite is not met. Same aesthetic as the welcome banner + the
28
+ * `neurcode home` panels: subtle, structured, no theatrics.
29
+ *
30
+ * The panel writes to stderr (so JSON-mode callers piping stdout get clean
31
+ * JSON or no output) and returns the exit code the caller should propagate.
32
+ */
33
+ export declare function renderRuntimeStateGuidance(issue: RuntimeStateIssue, state: RuntimeStateSnapshot, options?: {
34
+ commandLabel?: string;
35
+ }): number;
36
+ /**
37
+ * Convenience: detect state + render guidance + return the exit code for
38
+ * the FIRST unsatisfied prerequisite (in lifecycle order). Returns null if
39
+ * all required prerequisites are satisfied.
40
+ */
41
+ export declare function guardRequired(projectRoot: string, required: ReadonlyArray<RuntimeStateIssue>, options?: {
42
+ commandLabel?: string;
43
+ }): number | null;
44
+ //# sourceMappingURL=runtime-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../../src/utils/runtime-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,MAAM,iBAAiB,GACzB,gBAAgB,GAChB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAUD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,CAiB5E;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACtC,MAAM,CA2ER;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC,EAC1C,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACtC,MAAM,GAAG,IAAI,CAcf"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Runtime state guardrails.
4
+ *
5
+ * Detects the operational state of a project root and produces structured
6
+ * "what's next" guidance when a command would otherwise fail with a raw
7
+ * runtime / git / filesystem error.
8
+ *
9
+ * Pure, deterministic, no network. Read-only. No mutations to .neurcode/
10
+ * or any other on-disk state.
11
+ *
12
+ * Aesthetic discipline: subtle sophistication, no terminal theatrics.
13
+ * Aligned with the operational-experience refabrication phase
14
+ * (docs/ux/final-operational-experience-report.md).
15
+ */
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.detectRuntimeState = detectRuntimeState;
21
+ exports.renderRuntimeStateGuidance = renderRuntimeStateGuidance;
22
+ exports.guardRequired = guardRequired;
23
+ const fs_1 = require("fs");
24
+ const child_process_1 = require("child_process");
25
+ const path_1 = require("path");
26
+ const chalk_1 = __importDefault(require("chalk"));
27
+ function safeExec(cmd, cwd) {
28
+ try {
29
+ return (0, child_process_1.execSync)(cmd, { cwd, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ function detectRuntimeState(projectRoot) {
36
+ const root = (0, path_1.resolve)(projectRoot);
37
+ const gitDir = safeExec('git rev-parse --git-dir', root);
38
+ const isGitRepo = !!gitDir;
39
+ const headSha = isGitRepo ? safeExec('git rev-parse --verify HEAD', root) : null;
40
+ const hasHeadCommit = !!headSha;
41
+ const hasNeurcodeDir = (0, fs_1.existsSync)((0, path_1.resolve)(root, '.neurcode'));
42
+ const hasIntentPack = (0, fs_1.existsSync)((0, path_1.resolve)(root, '.neurcode/intent-pack.json'));
43
+ const hasLastVerifyOutput = (0, fs_1.existsSync)((0, path_1.resolve)(root, '.neurcode/last-verify-output.json'));
44
+ return {
45
+ projectRoot: root,
46
+ isGitRepo,
47
+ hasHeadCommit,
48
+ hasNeurcodeDir,
49
+ hasIntentPack,
50
+ hasLastVerifyOutput,
51
+ };
52
+ }
53
+ /**
54
+ * Render an operational-guidance panel when a command cannot run because
55
+ * a prerequisite is not met. Same aesthetic as the welcome banner + the
56
+ * `neurcode home` panels: subtle, structured, no theatrics.
57
+ *
58
+ * The panel writes to stderr (so JSON-mode callers piping stdout get clean
59
+ * JSON or no output) and returns the exit code the caller should propagate.
60
+ */
61
+ function renderRuntimeStateGuidance(issue, state, options = {}) {
62
+ const label = options.commandLabel ?? 'this command';
63
+ const print = (line = '') => process.stderr.write(line + '\n');
64
+ print('');
65
+ print(chalk_1.default.bold(`neurcode · runtime state guidance`));
66
+ print(chalk_1.default.dim(` ${label} cannot continue — a prerequisite is not yet satisfied.`));
67
+ print('');
68
+ switch (issue) {
69
+ case 'not-a-git-repo':
70
+ print(` ${chalk_1.default.bold('Issue')} not inside a git repository`);
71
+ print(` ${chalk_1.default.bold('Path')} ${chalk_1.default.dim(state.projectRoot)}`);
72
+ print('');
73
+ print(` ${chalk_1.default.bold('Why this matters')}`);
74
+ print(chalk_1.default.dim(' Neurcode governs change against a declared intent contract. The'));
75
+ print(chalk_1.default.dim(' diff between the current working tree and a base ref is the input'));
76
+ print(chalk_1.default.dim(' to the verify pipeline. Without git, there is no diff to govern.'));
77
+ print('');
78
+ print(` ${chalk_1.default.bold('Recommended next step')}`);
79
+ print(chalk_1.default.cyan(' git init && git add . && git commit -m "chore: baseline"'));
80
+ print('');
81
+ break;
82
+ case 'no-head-commit':
83
+ print(` ${chalk_1.default.bold('Issue')} git repository has no HEAD commit yet`);
84
+ print(` ${chalk_1.default.bold('Path')} ${chalk_1.default.dim(state.projectRoot)}`);
85
+ print('');
86
+ print(` ${chalk_1.default.bold('Why this matters')}`);
87
+ print(chalk_1.default.dim(' Verify needs a base commit to diff against. A freshly-initialised'));
88
+ print(chalk_1.default.dim(' git repository has no HEAD until something is committed.'));
89
+ print('');
90
+ print(` ${chalk_1.default.bold('Recommended next step')}`);
91
+ print(chalk_1.default.cyan(' git add . && git commit -m "chore: baseline"'));
92
+ print(chalk_1.default.dim(' Then re-run verify; the working-tree diff will resolve cleanly.'));
93
+ print('');
94
+ break;
95
+ case 'no-neurcode-dir':
96
+ print(` ${chalk_1.default.bold('Issue')} no .neurcode/ directory in the project root`);
97
+ print(` ${chalk_1.default.bold('Path')} ${chalk_1.default.dim(state.projectRoot)}`);
98
+ print('');
99
+ print(` ${chalk_1.default.bold('Why this matters')}`);
100
+ print(chalk_1.default.dim(' Neurcode reads its governance state from .neurcode/ — the intent'));
101
+ print(chalk_1.default.dim(' contract, evidence artefacts, control-plane snapshots, and replay'));
102
+ print(chalk_1.default.dim(' state all live there. Without it, verify has no contract to enforce.'));
103
+ print('');
104
+ print(` ${chalk_1.default.bold('Recommended next step')}`);
105
+ print(chalk_1.default.cyan(' neurcode start') + chalk_1.default.dim(' "what you intend to change"'));
106
+ print(chalk_1.default.dim(' This declares the intent contract and initialises .neurcode/.'));
107
+ print('');
108
+ break;
109
+ case 'no-intent-pack':
110
+ print(` ${chalk_1.default.bold('Issue')} no intent contract on disk`);
111
+ print(` ${chalk_1.default.bold('Path')} ${chalk_1.default.dim(state.projectRoot)}/.neurcode/intent-pack.json`);
112
+ print('');
113
+ print(` ${chalk_1.default.bold('Why this matters')}`);
114
+ print(chalk_1.default.dim(' Neurcode is intent-first. Verify needs a declared intent contract'));
115
+ print(chalk_1.default.dim(' to know what scope to govern. Without it, runtime falls back to'));
116
+ print(chalk_1.default.dim(' structural rules only — the dominant value of the runtime (scope'));
117
+ print(chalk_1.default.dim(' guard, forbidden-boundary enforcement, import-edge governance) is'));
118
+ print(chalk_1.default.dim(' inactive.'));
119
+ print('');
120
+ print(` ${chalk_1.default.bold('Recommended next step')}`);
121
+ print(chalk_1.default.cyan(' neurcode start') + chalk_1.default.dim(' "what you intend to change"'));
122
+ print('');
123
+ break;
124
+ }
125
+ print(chalk_1.default.dim(' See: ') + chalk_1.default.cyan('neurcode home') + chalk_1.default.dim(' for the current runtime state.'));
126
+ print('');
127
+ return 2;
128
+ }
129
+ /**
130
+ * Convenience: detect state + render guidance + return the exit code for
131
+ * the FIRST unsatisfied prerequisite (in lifecycle order). Returns null if
132
+ * all required prerequisites are satisfied.
133
+ */
134
+ function guardRequired(projectRoot, required, options = {}) {
135
+ const state = detectRuntimeState(projectRoot);
136
+ const checks = [
137
+ ['not-a-git-repo', !state.isGitRepo],
138
+ ['no-head-commit', state.isGitRepo && !state.hasHeadCommit],
139
+ ['no-neurcode-dir', !state.hasNeurcodeDir],
140
+ ['no-intent-pack', !state.hasIntentPack],
141
+ ];
142
+ for (const [issue, failed] of checks) {
143
+ if (!required.includes(issue))
144
+ continue;
145
+ if (!failed)
146
+ continue;
147
+ return renderRuntimeStateGuidance(issue, state, options);
148
+ }
149
+ return null;
150
+ }
151
+ //# sourceMappingURL=runtime-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../../src/utils/runtime-state.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;AA8BH,gDAiBC;AAUD,gEA+EC;AAOD,sCAkBC;AA/JD,2BAAgC;AAChC,iDAAyC;AACzC,+BAA+B;AAC/B,kDAA0B;AAiB1B,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,MAAM,IAAI,GAAG,IAAA,cAAO,EAAC,WAAW,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjF,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC;IAChC,MAAM,cAAc,GAAG,IAAA,eAAU,EAAC,IAAA,cAAO,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAA,eAAU,EAAC,IAAA,cAAO,EAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAC9E,MAAM,mBAAmB,GAAG,IAAA,eAAU,EAAC,IAAA,cAAO,EAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC,CAAC;IAC3F,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,SAAS;QACT,aAAa;QACb,cAAc;QACd,aAAa;QACb,mBAAmB;KACpB,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,0BAA0B,CACxC,KAAwB,EACxB,KAA2B,EAC3B,UAAqC,EAAE;IAEvC,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,IAAI,cAAc,CAAC;IAErD,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE/D,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACzD,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,KAAK,yDAAyD,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,EAAE,CAAC,CAAC;IAEV,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,gBAAgB;YACnB,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;YACrE,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACzE,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC7C,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;YACxF,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;YAC1F,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC,CAAC;YACzF,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC,CAAC;YAClF,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,MAAM;QAER,KAAK,gBAAgB;YACnB,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;YAC/E,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACzE,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC7C,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;YAC1F,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;YACjF,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;YACtE,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;YACxF,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,MAAM;QAER,KAAK,iBAAiB;YACpB,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;YACrF,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACzE,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC7C,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC,CAAC;YACzF,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;YAC1F,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC,CAAC;YAC7F,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACpF,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC,CAAC;YACtF,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,MAAM;QAER,KAAK,gBAAgB;YACnB,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YACpE,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;YACpG,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC7C,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;YAC1F,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;YACxF,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC,CAAC;YACzF,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;YAC1F,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACpF,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,MAAM;IACV,CAAC;IAED,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACzG,KAAK,CAAC,EAAE,CAAC,CAAC;IAEV,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAC3B,WAAmB,EACnB,QAA0C,EAC1C,UAAqC,EAAE;IAEvC,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAwC;QAClD,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;QACpC,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAC3D,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC;QAC1C,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;KACzC,CAAC;IACF,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACxC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,OAAO,0BAA0B,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -8,6 +8,9 @@ export interface CliState {
8
8
  projectId?: string;
9
9
  orgId?: string;
10
10
  orgName?: string;
11
+ workspaceType?: 'personal' | 'organization';
12
+ workspaceRole?: string;
13
+ linkedAt?: string;
11
14
  sessionId?: string;
12
15
  lastPlanId?: string;
13
16
  activePlanId?: string;
@@ -50,10 +53,28 @@ export declare function getOrgId(): string | null;
50
53
  * Set organization ID in state
51
54
  */
52
55
  export declare function setOrgId(orgId: string, orgName?: string): void;
56
+ /**
57
+ * Persist the full governance ownership context for this repository.
58
+ */
59
+ export declare function setWorkspaceContext(input: {
60
+ orgId: string;
61
+ orgName?: string;
62
+ workspaceType?: 'personal' | 'organization';
63
+ workspaceRole?: string;
64
+ projectId?: string;
65
+ }): void;
53
66
  /**
54
67
  * Get organization name from state
55
68
  */
56
69
  export declare function getOrgName(): string | null;
70
+ /**
71
+ * Get workspace ownership type from state.
72
+ */
73
+ export declare function getWorkspaceType(): 'personal' | 'organization' | null;
74
+ /**
75
+ * Get workspace role captured during repo initialization.
76
+ */
77
+ export declare function getWorkspaceRole(): string | null;
57
78
  /**
58
79
  * Get last plan ID from state
59
80
  */
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AA4BD;;GAEG;AACH,wBAAgB,SAAS,IAAI,QAAQ,CAcpC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAOxD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAG5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAG5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAGxC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAG1C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAG7C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAG/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAGtD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE9D"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AA4BD;;GAEG;AACH,wBAAgB,SAAS,IAAI,QAAQ,CAcpC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAOxD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAG5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAG5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAGxC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CASP;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAG1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,GAAG,cAAc,GAAG,IAAI,CAGrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAGhD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAG7C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAG/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAGtD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE9D"}
@@ -15,7 +15,10 @@ exports.getProjectId = getProjectId;
15
15
  exports.setProjectId = setProjectId;
16
16
  exports.getOrgId = getOrgId;
17
17
  exports.setOrgId = setOrgId;
18
+ exports.setWorkspaceContext = setWorkspaceContext;
18
19
  exports.getOrgName = getOrgName;
20
+ exports.getWorkspaceType = getWorkspaceType;
21
+ exports.getWorkspaceRole = getWorkspaceRole;
19
22
  exports.getLastPlanId = getLastPlanId;
20
23
  exports.setLastPlanId = setLastPlanId;
21
24
  exports.getActivePlanId = getActivePlanId;
@@ -123,6 +126,19 @@ function getOrgId() {
123
126
  function setOrgId(orgId, orgName) {
124
127
  saveState({ orgId, ...(orgName ? { orgName } : {}) });
125
128
  }
129
+ /**
130
+ * Persist the full governance ownership context for this repository.
131
+ */
132
+ function setWorkspaceContext(input) {
133
+ saveState({
134
+ orgId: input.orgId,
135
+ ...(input.orgName ? { orgName: input.orgName } : {}),
136
+ ...(input.workspaceType ? { workspaceType: input.workspaceType } : {}),
137
+ ...(input.workspaceRole ? { workspaceRole: input.workspaceRole } : {}),
138
+ ...(input.projectId ? { projectId: input.projectId } : {}),
139
+ linkedAt: new Date().toISOString(),
140
+ });
141
+ }
126
142
  /**
127
143
  * Get organization name from state
128
144
  */
@@ -130,6 +146,20 @@ function getOrgName() {
130
146
  const state = loadState();
131
147
  return state.orgName || null;
132
148
  }
149
+ /**
150
+ * Get workspace ownership type from state.
151
+ */
152
+ function getWorkspaceType() {
153
+ const state = loadState();
154
+ return state.workspaceType || null;
155
+ }
156
+ /**
157
+ * Get workspace role captured during repo initialization.
158
+ */
159
+ function getWorkspaceRole() {
160
+ const state = loadState();
161
+ return state.workspaceRole || null;
162
+ }
133
163
  /**
134
164
  * Get last plan ID from state
135
165
  */
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}