openplanr 1.14.3 → 1.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 (79) hide show
  1. package/dist/cli/commands/operate.d.ts.map +1 -1
  2. package/dist/cli/commands/operate.js +54 -87
  3. package/dist/cli/commands/operate.js.map +1 -1
  4. package/dist/services/operate/config.d.ts +4 -1
  5. package/dist/services/operate/config.d.ts.map +1 -1
  6. package/dist/services/operate/config.js +56 -2
  7. package/dist/services/operate/config.js.map +1 -1
  8. package/dist/services/operate/doctor.d.ts.map +1 -1
  9. package/dist/services/operate/doctor.js +15 -0
  10. package/dist/services/operate/doctor.js.map +1 -1
  11. package/dist/services/operate/evidence-classifications.d.ts +59 -0
  12. package/dist/services/operate/evidence-classifications.d.ts.map +1 -0
  13. package/dist/services/operate/evidence-classifications.js +132 -0
  14. package/dist/services/operate/evidence-classifications.js.map +1 -0
  15. package/dist/services/operate/evidence-diagnostics.d.ts +23 -0
  16. package/dist/services/operate/evidence-diagnostics.d.ts.map +1 -0
  17. package/dist/services/operate/evidence-diagnostics.js +152 -0
  18. package/dist/services/operate/evidence-diagnostics.js.map +1 -0
  19. package/dist/services/operate/evidence.d.ts.map +1 -1
  20. package/dist/services/operate/evidence.js +54 -7
  21. package/dist/services/operate/evidence.js.map +1 -1
  22. package/dist/services/operate/index.d.ts.map +1 -1
  23. package/dist/services/operate/index.js +459 -62
  24. package/dist/services/operate/index.js.map +1 -1
  25. package/dist/services/operate/interaction/action-service.d.ts +17 -0
  26. package/dist/services/operate/interaction/action-service.d.ts.map +1 -0
  27. package/dist/services/operate/interaction/action-service.js +84 -0
  28. package/dist/services/operate/interaction/action-service.js.map +1 -0
  29. package/dist/services/operate/interaction/answer-service.d.ts +33 -0
  30. package/dist/services/operate/interaction/answer-service.d.ts.map +1 -0
  31. package/dist/services/operate/interaction/answer-service.js +239 -0
  32. package/dist/services/operate/interaction/answer-service.js.map +1 -0
  33. package/dist/services/operate/interaction/charter-suggestions.d.ts +29 -0
  34. package/dist/services/operate/interaction/charter-suggestions.d.ts.map +1 -0
  35. package/dist/services/operate/interaction/charter-suggestions.js +104 -0
  36. package/dist/services/operate/interaction/charter-suggestions.js.map +1 -0
  37. package/dist/services/operate/interaction/confirmation-service.d.ts +30 -0
  38. package/dist/services/operate/interaction/confirmation-service.d.ts.map +1 -0
  39. package/dist/services/operate/interaction/confirmation-service.js +78 -0
  40. package/dist/services/operate/interaction/confirmation-service.js.map +1 -0
  41. package/dist/services/operate/interaction/question-engine.d.ts +39 -0
  42. package/dist/services/operate/interaction/question-engine.d.ts.map +1 -0
  43. package/dist/services/operate/interaction/question-engine.js +277 -0
  44. package/dist/services/operate/interaction/question-engine.js.map +1 -0
  45. package/dist/services/operate/interaction/question-registry.d.ts +16 -0
  46. package/dist/services/operate/interaction/question-registry.d.ts.map +1 -0
  47. package/dist/services/operate/interaction/question-registry.js +190 -0
  48. package/dist/services/operate/interaction/question-registry.js.map +1 -0
  49. package/dist/services/operate/interaction/session-service.d.ts +55 -0
  50. package/dist/services/operate/interaction/session-service.d.ts.map +1 -0
  51. package/dist/services/operate/interaction/session-service.js +272 -0
  52. package/dist/services/operate/interaction/session-service.js.map +1 -0
  53. package/dist/services/operate/interaction/terminal-renderer.d.ts +8 -0
  54. package/dist/services/operate/interaction/terminal-renderer.d.ts.map +1 -0
  55. package/dist/services/operate/interaction/terminal-renderer.js +103 -0
  56. package/dist/services/operate/interaction/terminal-renderer.js.map +1 -0
  57. package/dist/services/operate/maintenance.d.ts.map +1 -1
  58. package/dist/services/operate/maintenance.js +40 -3
  59. package/dist/services/operate/maintenance.js.map +1 -1
  60. package/dist/services/operate/redaction.d.ts +7 -0
  61. package/dist/services/operate/redaction.d.ts.map +1 -1
  62. package/dist/services/operate/redaction.js +110 -14
  63. package/dist/services/operate/redaction.js.map +1 -1
  64. package/dist/services/operate/types.d.ts +194 -1
  65. package/dist/services/operate/types.d.ts.map +1 -1
  66. package/dist/services/operate/types.js.map +1 -1
  67. package/dist/services/operate/workspace.d.ts +1 -0
  68. package/dist/services/operate/workspace.d.ts.map +1 -1
  69. package/dist/services/operate/workspace.js +2 -0
  70. package/dist/services/operate/workspace.js.map +1 -1
  71. package/dist/services/pipeline-package-service.d.ts +14 -0
  72. package/dist/services/pipeline-package-service.d.ts.map +1 -1
  73. package/dist/services/pipeline-package-service.js +45 -1
  74. package/dist/services/pipeline-package-service.js.map +1 -1
  75. package/dist/services/runtime-manager-service.d.ts +3 -0
  76. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  77. package/dist/services/runtime-manager-service.js +26 -2
  78. package/dist/services/runtime-manager-service.js.map +1 -1
  79. package/package.json +3 -2
@@ -0,0 +1,104 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { canonicalDigest } from '../canonical.js';
4
+ import { inspectEmbeddedInstructions, normalizeUntrustedText, redactSensitiveText, } from '../redaction.js';
5
+ const ENGINE_VERSION = '1.0.0';
6
+ const MAX_METADATA_BYTES = 64 * 1024;
7
+ const MAX_SUGGESTION_LENGTH = 1_000;
8
+ async function readBoundedJson(projectRoot, relativePath) {
9
+ const target = path.join(projectRoot, relativePath);
10
+ const bytes = await readFile(target).catch(() => null);
11
+ if (!bytes || bytes.byteLength > MAX_METADATA_BYTES)
12
+ return null;
13
+ try {
14
+ const parsed = JSON.parse(bytes.toString('utf8'));
15
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
16
+ ? parsed
17
+ : null;
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ function safeMetadataValue(value) {
24
+ if (typeof value !== 'string')
25
+ return null;
26
+ const normalized = normalizeUntrustedText(value).replace(/\s+/g, ' ').trim();
27
+ if (!normalized || normalized.length > MAX_SUGGESTION_LENGTH)
28
+ return null;
29
+ const inspection = inspectEmbeddedInstructions(normalized);
30
+ if (inspection.annotations.length > 0 || inspection.quarantined)
31
+ return null;
32
+ try {
33
+ const redacted = redactSensitiveText(normalized);
34
+ return redacted.redactions.length === 0 ? redacted.value : null;
35
+ }
36
+ catch {
37
+ return null;
38
+ }
39
+ }
40
+ /**
41
+ * Produce bounded, provider-free charter drafts from local metadata.
42
+ *
43
+ * Only purpose is eligible at launch. Product stage, commercial facts,
44
+ * customers, goals, metrics, guardrails, and unknowns remain human-owned.
45
+ */
46
+ export async function buildOperatingCharterSuggestions(input) {
47
+ const [packageJson, planrConfig] = await Promise.all([
48
+ readBoundedJson(input.projectRoot, 'package.json'),
49
+ readBoundedJson(input.projectRoot, '.planr/config.json'),
50
+ ]);
51
+ const evidence = {
52
+ packageDescription: safeMetadataValue(packageJson?.description),
53
+ projectName: safeMetadataValue(planrConfig?.projectName),
54
+ };
55
+ const evidenceDigest = canonicalDigest({
56
+ engineVersion: ENGINE_VERSION,
57
+ evidence,
58
+ });
59
+ const suggestions = [];
60
+ if (evidence.packageDescription) {
61
+ suggestions.push({
62
+ field: 'purpose',
63
+ value: evidence.packageDescription,
64
+ draft: true,
65
+ confidence: 'high',
66
+ citation: {
67
+ source: 'package-json',
68
+ location: 'package.json#description',
69
+ digest: canonicalDigest(evidence.packageDescription),
70
+ },
71
+ engineVersion: ENGINE_VERSION,
72
+ });
73
+ }
74
+ else if (evidence.projectName) {
75
+ suggestions.push({
76
+ field: 'purpose',
77
+ value: `Operate ${evidence.projectName} with explicit, evidence-cited decisions.`,
78
+ draft: true,
79
+ confidence: 'medium',
80
+ citation: {
81
+ source: 'planr-config',
82
+ location: '.planr/config.json#projectName',
83
+ digest: canonicalDigest(evidence.projectName),
84
+ },
85
+ engineVersion: ENGINE_VERSION,
86
+ });
87
+ }
88
+ const suggested = new Set(suggestions.map((entry) => entry.field));
89
+ return {
90
+ evidenceDigest,
91
+ suggestions,
92
+ gaps: [
93
+ 'purpose',
94
+ 'stage',
95
+ 'businessModel',
96
+ 'idealCustomer',
97
+ 'goals',
98
+ 'successMetrics',
99
+ 'guardrails',
100
+ 'knownUnknowns',
101
+ ].filter((field) => !suggested.has(field)),
102
+ };
103
+ }
104
+ //# sourceMappingURL=charter-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charter-suggestions.js","sourceRoot":"","sources":["../../../../src/services/operate/interaction/charter-suggestions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type GuidedConfirmation, type OperatingActionEffect, type OperatingEventHead } from '../types.js';
2
+ export interface OperatingConfirmationMaterial {
3
+ actionId: string;
4
+ sessionId: string;
5
+ command: string;
6
+ effect: Exclude<OperatingActionEffect, 'read-only'>;
7
+ providerUse: boolean;
8
+ confirmationScope: string;
9
+ projectIdentity: `sha256:${string}`;
10
+ projectHead: `sha256:${string}`;
11
+ configHead: `sha256:${string}`;
12
+ eventHead?: OperatingEventHead | null;
13
+ evidenceHead?: `sha256:${string}` | null;
14
+ providerPolicy?: `sha256:${string}` | null;
15
+ arguments?: string[];
16
+ destinations?: string[];
17
+ writes?: string[];
18
+ createdAt?: string;
19
+ expiresAt?: string;
20
+ }
21
+ export declare function operatingConfirmationDigest(material: OperatingConfirmationMaterial): `sha256:${string}`;
22
+ export declare function createOperatingConfirmation(material: OperatingConfirmationMaterial): GuidedConfirmation;
23
+ export declare function assertOperatingConfirmation(input: {
24
+ expected: GuidedConfirmation;
25
+ actionId: string;
26
+ confirmationDigest?: string;
27
+ confirmed: boolean;
28
+ now?: Date;
29
+ }): GuidedConfirmation;
30
+ //# sourceMappingURL=confirmation-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation-service.d.ts","sourceRoot":"","sources":["../../../../src/services/operate/interaction/confirmation-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IACpD,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,UAAU,MAAM,EAAE,CAAC;IACpC,WAAW,EAAE,UAAU,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,UAAU,MAAM,EAAE,GAAG,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,UAAU,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,6BAA6B,GACtC,UAAU,MAAM,EAAE,CAkBpB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,6BAA6B,GACtC,kBAAkB,CA4BpB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,kBAAkB,CAkCrB"}
@@ -0,0 +1,78 @@
1
+ import { canonicalDigest } from '../canonical.js';
2
+ import { OperateError, } from '../types.js';
3
+ function sorted(values = []) {
4
+ return [...new Set(values)].sort();
5
+ }
6
+ export function operatingConfirmationDigest(material) {
7
+ return canonicalDigest({
8
+ actionId: material.actionId,
9
+ sessionId: material.sessionId,
10
+ command: material.command,
11
+ effect: material.effect,
12
+ providerUse: material.providerUse,
13
+ confirmationScope: material.confirmationScope,
14
+ projectIdentity: material.projectIdentity,
15
+ projectHead: material.projectHead,
16
+ configHead: material.configHead,
17
+ eventHead: material.eventHead ?? null,
18
+ evidenceHead: material.evidenceHead ?? null,
19
+ providerPolicy: material.providerPolicy ?? null,
20
+ arguments: [...(material.arguments ?? [])],
21
+ destinations: sorted(material.destinations),
22
+ writes: sorted(material.writes),
23
+ });
24
+ }
25
+ export function createOperatingConfirmation(material) {
26
+ const createdAt = material.createdAt ?? new Date().toISOString();
27
+ const expiresAt = material.expiresAt ?? new Date(Date.parse(createdAt) + 30 * 60 * 1_000).toISOString();
28
+ const confirmationDigest = operatingConfirmationDigest(material);
29
+ return {
30
+ kind: 'guided-confirmation',
31
+ schemaVersion: '1.0.0',
32
+ protocolVersion: '1.2.0',
33
+ confirmationId: `GIC-${confirmationDigest.slice('sha256:'.length, 'sha256:'.length + 24)}`,
34
+ state: 'preview',
35
+ actionId: material.actionId,
36
+ sessionId: material.sessionId,
37
+ command: material.command,
38
+ effect: material.effect,
39
+ providerUse: material.providerUse,
40
+ confirmationScope: material.confirmationScope,
41
+ confirmationDigest,
42
+ projectIdentity: material.projectIdentity,
43
+ projectHead: material.projectHead,
44
+ configHead: material.configHead,
45
+ eventHead: material.eventHead ?? null,
46
+ arguments: [...(material.arguments ?? [])],
47
+ destinations: sorted(material.destinations),
48
+ writes: sorted(material.writes),
49
+ createdAt,
50
+ expiresAt,
51
+ };
52
+ }
53
+ export function assertOperatingConfirmation(input) {
54
+ const now = input.now ?? new Date();
55
+ if (!input.confirmed ||
56
+ input.actionId !== input.expected.actionId ||
57
+ input.confirmationDigest !== input.expected.confirmationDigest) {
58
+ throw new OperateError('E_OPERATE_ROUTE_CONFIRMATION_REQUIRED', `Action ${input.expected.actionId} requires its exact named confirmation digest.`, {
59
+ actionId: input.expected.actionId,
60
+ confirmationDigest: input.expected.confirmationDigest,
61
+ previewCommand: input.expected.command.replace(/\s+--yes\b/g, ''),
62
+ });
63
+ }
64
+ if (now.getTime() >= Date.parse(input.expected.expiresAt)) {
65
+ throw new OperateError('E_OPERATE_ROUTE_DRIFT', `Confirmation for ${input.expected.actionId} expired; preview the action again.`, {
66
+ actionId: input.expected.actionId,
67
+ changedDimensions: ['expiry'],
68
+ previewCommand: input.expected.command.replace(/\s+--yes\b/g, ''),
69
+ });
70
+ }
71
+ return {
72
+ ...input.expected,
73
+ state: 'confirmed',
74
+ confirmedAt: now.toISOString(),
75
+ confirmedBy: 'explicit-cli-authority',
76
+ };
77
+ }
78
+ //# sourceMappingURL=confirmation-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation-service.js","sourceRoot":"","sources":["../../../../src/services/operate/interaction/confirmation-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAEL,YAAY,GAGb,MAAM,aAAa,CAAC;AAsBrB,SAAS,MAAM,CAAC,SAA4B,EAAE;IAC5C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAuC;IAEvC,OAAO,eAAe,CAAC;QACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI;QACrC,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,IAAI;QAC3C,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,IAAI;QAC/C,SAAS,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC1C,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAuC;IAEvC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjE,MAAM,SAAS,GACb,QAAQ,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACxF,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACjE,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,aAAa,EAAE,OAAO;QACtB,eAAe,EAAE,OAAO;QACxB,cAAc,EAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE;QAC1F,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,kBAAkB;QAClB,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI;QACrC,SAAS,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC1C,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/B,SAAS;QACT,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAM3C;IACC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACpC,IACE,CAAC,KAAK,CAAC,SAAS;QAChB,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,QAAQ;QAC1C,KAAK,CAAC,kBAAkB,KAAK,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAC9D,CAAC;QACD,MAAM,IAAI,YAAY,CACpB,uCAAuC,EACvC,UAAU,KAAK,CAAC,QAAQ,CAAC,QAAQ,gDAAgD,EACjF;YACE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;YACjC,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,kBAAkB;YACrD,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAClE,CACF,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,YAAY,CACpB,uBAAuB,EACvB,oBAAoB,KAAK,CAAC,QAAQ,CAAC,QAAQ,qCAAqC,EAChF;YACE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;YACjC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;YAC7B,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAClE,CACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,KAAK,CAAC,QAAQ;QACjB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;QAC9B,WAAW,EAAE,wBAAwB;KACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { type GuidedQuestion, type GuidedQuestionnaire, type GuidedQuestionValue, type OperatingInitAnswers } from '../types.js';
2
+ import { type OperatingQuestionContext } from './question-registry.js';
3
+ export interface OperatingQuestionEngineContext extends OperatingQuestionContext {
4
+ projectRoot: string;
5
+ projectIdentity?: `sha256:${string}`;
6
+ runtime?: string;
7
+ interaction?: 'native' | 'chat' | 'terminal' | 'none';
8
+ projectHead?: `sha256:${string}`;
9
+ configHead?: `sha256:${string}`;
10
+ now?: string;
11
+ }
12
+ export type OperatingQuestionEngineResult = {
13
+ status: 'input-required';
14
+ stage: 'foundation' | 'product-charter';
15
+ answers: OperatingInitAnswers;
16
+ questions: GuidedQuestion[];
17
+ } | {
18
+ status: 'preview-ready';
19
+ stage: 'review';
20
+ answers: OperatingInitAnswers;
21
+ questions: GuidedQuestion[];
22
+ };
23
+ export declare function operatingInitAnswersFromOptions(options: Record<string, unknown>): OperatingInitAnswers;
24
+ export declare function mergeOperatingInitAnswersIntoOptions(options: Record<string, unknown>, answers: OperatingInitAnswers): Record<string, unknown>;
25
+ export declare function evaluateOperatingInitQuestions(input: {
26
+ answers?: OperatingInitAnswers;
27
+ context: OperatingQuestionEngineContext;
28
+ requireCharter?: boolean;
29
+ }): Promise<OperatingQuestionEngineResult>;
30
+ export declare function applyOperatingInitAnswer(answers: OperatingInitAnswers, context: OperatingQuestionContext, questionId: string, value: GuidedQuestionValue): OperatingInitAnswers;
31
+ export declare function createOperatingInitQuestionnaire(input: {
32
+ context: OperatingQuestionEngineContext;
33
+ questions: GuidedQuestion[];
34
+ stage: 'foundation' | 'product-charter' | 'review';
35
+ sessionId?: string;
36
+ createdAt?: string;
37
+ expiresAt?: string;
38
+ }): Promise<GuidedQuestionnaire>;
39
+ //# sourceMappingURL=question-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-engine.d.ts","sourceRoot":"","sources":["../../../../src/services/operate/interaction/question-engine.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EAGL,KAAK,wBAAwB,EAE9B,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,8BAA+B,SAAQ,wBAAwB;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,UAAU,MAAM,EAAE,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACtD,WAAW,CAAC,EAAE,UAAU,MAAM,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,UAAU,MAAM,EAAE,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,6BAA6B,GACrC;IACE,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC;IACxC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B,GACD;IACE,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B,CAAC;AAEN,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,oBAAoB,CAwDtB;AAED,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AA8GD,wBAAsB,8BAA8B,CAAC,KAAK,EAAE;IAC1D,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,8BAA8B,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CA6DzC;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,wBAAwB,EACjC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,mBAAmB,GACzB,oBAAoB,CAWtB;AAED,wBAAsB,gCAAgC,CAAC,KAAK,EAAE;IAC5D,OAAO,EAAE,8BAA8B,CAAC;IACxC,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,EAAE,YAAY,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2E/B"}
@@ -0,0 +1,277 @@
1
+ import path from 'node:path';
2
+ import { resolveGuidedInteractionValidators } from '../../pipeline-package-service.js';
3
+ import { canonicalDigest } from '../canonical.js';
4
+ import { OperateError, } from '../types.js';
5
+ import { buildOperatingCharterSuggestions } from './charter-suggestions.js';
6
+ import { operatingInitQuestionRegistry, } from './question-registry.js';
7
+ const STAGES = ['foundation', 'product-charter', 'review'];
8
+ export function operatingInitAnswersFromOptions(options) {
9
+ const list = (value) => Array.isArray(value)
10
+ ? value
11
+ .map(String)
12
+ .map((entry) => entry.trim())
13
+ .filter(Boolean)
14
+ : undefined;
15
+ const charter = options.charter && typeof options.charter === 'object' && !Array.isArray(options.charter)
16
+ ? options.charter
17
+ : {
18
+ ...(typeof options.purpose === 'string' ? { purpose: options.purpose } : {}),
19
+ ...(typeof options.productStage === 'string' ? { stage: options.productStage } : {}),
20
+ ...(typeof options.businessModel === 'string'
21
+ ? { businessModel: options.businessModel }
22
+ : {}),
23
+ ...(typeof options.idealCustomer === 'string'
24
+ ? { idealCustomer: options.idealCustomer }
25
+ : {}),
26
+ ...(list(options.goal) ? { goals: list(options.goal) } : {}),
27
+ ...(list(options.successMetric) ? { successMetrics: list(options.successMetric) } : {}),
28
+ ...(list(options.guardrail) ? { guardrails: list(options.guardrail) } : {}),
29
+ ...(list(options.knownUnknown) ? { knownUnknowns: list(options.knownUnknown) } : {}),
30
+ };
31
+ return {
32
+ ...(typeof options.profile === 'string'
33
+ ? { profile: options.profile }
34
+ : {}),
35
+ ...(typeof options.profileFile === 'string' ? { profileFile: options.profileFile } : {}),
36
+ ...(typeof options.decisionOwner === 'string' ? { decisionOwner: options.decisionOwner } : {}),
37
+ ...(typeof options.planningEngine === 'string'
38
+ ? { planningEngine: options.planningEngine }
39
+ : {}),
40
+ ...(typeof options.runtime === 'string'
41
+ ? { runtime: options.runtime }
42
+ : {}),
43
+ ...(typeof options.cadence === 'string'
44
+ ? { cadence: options.cadence }
45
+ : {}),
46
+ ...(typeof options.timezone === 'string' ? { timezone: options.timezone } : {}),
47
+ ...(typeof options.sensitivityCeiling === 'string'
48
+ ? {
49
+ sensitivityCeiling: options.sensitivityCeiling,
50
+ }
51
+ : {}),
52
+ ...(list(options.sources ?? options.source)
53
+ ? { sources: list(options.sources ?? options.source) }
54
+ : {}),
55
+ ...(list(options.evidenceFile) ? { evidenceFiles: list(options.evidenceFile) } : {}),
56
+ ...(list(options.components ?? options.component)
57
+ ? { componentRoots: list(options.components ?? options.component) }
58
+ : {}),
59
+ ...(Object.keys(charter ?? {}).length > 0 ? { charter } : {}),
60
+ };
61
+ }
62
+ export function mergeOperatingInitAnswersIntoOptions(options, answers) {
63
+ return {
64
+ ...options,
65
+ ...answers,
66
+ ...(answers.sources === undefined ? {} : { source: answers.sources, sources: answers.sources }),
67
+ ...(answers.evidenceFiles === undefined ? {} : { evidenceFile: answers.evidenceFiles }),
68
+ ...(answers.componentRoots === undefined
69
+ ? {}
70
+ : { component: answers.componentRoots, components: answers.componentRoots }),
71
+ };
72
+ }
73
+ function answered(value) {
74
+ if (typeof value === 'string')
75
+ return value.trim().length > 0;
76
+ if (Array.isArray(value))
77
+ return value.length > 0;
78
+ return value !== undefined;
79
+ }
80
+ function conditionVisible(definition, definitions, answers) {
81
+ return (definition.question.visibleWhen ?? []).every((condition) => {
82
+ const dependency = definitions.find((candidate) => candidate.question.questionId === condition.questionId);
83
+ const actual = dependency?.read(answers);
84
+ switch (condition.operator) {
85
+ case 'answered':
86
+ return answered(actual);
87
+ case 'not-answered':
88
+ return !answered(actual);
89
+ case 'equals':
90
+ return actual === condition.value;
91
+ case 'not-equals':
92
+ return actual !== condition.value;
93
+ case 'contains':
94
+ return Array.isArray(actual)
95
+ ? actual.includes(String(condition.value))
96
+ : String(actual ?? '').includes(String(condition.value));
97
+ case 'not-contains':
98
+ return Array.isArray(actual)
99
+ ? !actual.includes(String(condition.value))
100
+ : !String(actual ?? '').includes(String(condition.value));
101
+ }
102
+ return false;
103
+ });
104
+ }
105
+ function normalizeValue(question, value) {
106
+ const normalized = Array.isArray(value)
107
+ ? [...new Set(value.map((entry) => entry.trim()).filter(Boolean))]
108
+ : typeof value === 'string'
109
+ ? value.trim()
110
+ : value;
111
+ const choices = question.choices?.map((choice) => choice.id);
112
+ if (choices &&
113
+ (Array.isArray(normalized)
114
+ ? normalized.some((entry) => !choices.includes(entry))
115
+ : !choices.includes(String(normalized)))) {
116
+ throw new OperateError('E_OPERATE_QUESTIONNAIRE_INVALID', `${question.label} contains an unsupported choice.`);
117
+ }
118
+ const length = typeof normalized === 'string' ? normalized.length : undefined;
119
+ const itemCount = Array.isArray(normalized) ? normalized.length : undefined;
120
+ if ((length !== undefined &&
121
+ ((question.validation?.minLength !== undefined && length < question.validation.minLength) ||
122
+ (question.validation?.maxLength !== undefined &&
123
+ length > question.validation.maxLength))) ||
124
+ (itemCount !== undefined &&
125
+ ((question.validation?.minItems !== undefined && itemCount < question.validation.minItems) ||
126
+ (question.validation?.maxItems !== undefined && itemCount > question.validation.maxItems)))) {
127
+ throw new OperateError('E_OPERATE_QUESTIONNAIRE_INVALID', `${question.label} does not satisfy its bounded validation rules.`);
128
+ }
129
+ return normalized;
130
+ }
131
+ function validateSemanticAnswers(answers, context) {
132
+ if (answers.timezone) {
133
+ try {
134
+ new Intl.DateTimeFormat('en', { timeZone: answers.timezone }).format(new Date(0));
135
+ }
136
+ catch {
137
+ throw new OperateError('E_OPERATE_QUESTIONNAIRE_INVALID', `Invalid IANA timezone: ${answers.timezone}.`);
138
+ }
139
+ }
140
+ const unavailable = (answers.sources ?? []).filter((source) => !context.availableSources.includes(source));
141
+ if (unavailable.length > 0) {
142
+ throw new OperateError('E_OPERATE_QUESTIONNAIRE_INVALID', `Evidence source is unavailable: ${unavailable.join(', ')}. Configure it or leave it disabled.`);
143
+ }
144
+ for (const candidate of answers.evidenceFiles ?? []) {
145
+ if (path.isAbsolute(candidate) || candidate.split(/[\\/]+/).includes('..')) {
146
+ throw new OperateError('E_OPERATE_QUESTIONNAIRE_INVALID', 'Evidence import paths must remain relative to a configured workspace root.');
147
+ }
148
+ }
149
+ }
150
+ export async function evaluateOperatingInitQuestions(input) {
151
+ const definitions = operatingInitQuestionRegistry(input.context);
152
+ let answers = structuredClone(input.answers ?? {});
153
+ for (const definition of definitions) {
154
+ const current = definition.read(answers);
155
+ if (current !== undefined && answered(current)) {
156
+ answers = definition.write(answers, normalizeValue(definition.question, current));
157
+ }
158
+ }
159
+ validateSemanticAnswers(answers, input.context);
160
+ for (const stage of STAGES.slice(0, input.requireCharter === false ? 1 : 2)) {
161
+ const visible = definitions.filter((definition) => definition.stage === stage && conditionVisible(definition, definitions, answers));
162
+ const missing = visible.filter((definition) => definition.question.type !== 'informational' &&
163
+ definition.question.required &&
164
+ !answered(definition.read(answers)));
165
+ if (missing.length > 0) {
166
+ const suggestions = stage === 'product-charter'
167
+ ? await buildOperatingCharterSuggestions({ projectRoot: input.context.projectRoot })
168
+ : null;
169
+ return {
170
+ status: 'input-required',
171
+ stage: stage,
172
+ answers,
173
+ questions: visible
174
+ .filter((definition) => !answered(definition.read(answers)))
175
+ .map((definition) => {
176
+ const question = structuredClone(definition.question);
177
+ const suggestion = suggestions?.suggestions.find((entry) => entry.field === question.questionId);
178
+ if (!suggestion)
179
+ return question;
180
+ return {
181
+ ...question,
182
+ valueSemantics: 'suggestion',
183
+ suggestedValue: suggestion.value,
184
+ suggestionReason: [
185
+ `Draft from ${suggestion.citation.location}`,
186
+ `${suggestion.confidence} confidence`,
187
+ `evidence ${suggestion.citation.digest}`,
188
+ `rules ${suggestion.engineVersion}`,
189
+ ].join('; '),
190
+ };
191
+ }),
192
+ };
193
+ }
194
+ }
195
+ return {
196
+ status: 'preview-ready',
197
+ stage: 'review',
198
+ answers,
199
+ questions: definitions
200
+ .filter((definition) => definition.stage === 'review')
201
+ .map((definition) => structuredClone(definition.question)),
202
+ };
203
+ }
204
+ export function applyOperatingInitAnswer(answers, context, questionId, value) {
205
+ const definition = operatingInitQuestionRegistry(context).find((candidate) => candidate.question.questionId === questionId);
206
+ if (!definition) {
207
+ throw new OperateError('E_OPERATE_QUESTIONNAIRE_INVALID', `Unknown Operating Board question: ${questionId}.`);
208
+ }
209
+ return definition.write(answers, normalizeValue(definition.question, value));
210
+ }
211
+ export async function createOperatingInitQuestionnaire(input) {
212
+ const createdAt = input.createdAt ?? input.context.now ?? new Date().toISOString();
213
+ const expiresAt = input.expiresAt ?? new Date(new Date(createdAt).getTime() + 24 * 60 * 60 * 1000).toISOString();
214
+ const projectIdentity = input.context.projectIdentity ??
215
+ canonicalDigest({
216
+ projectRoot: path.resolve(input.context.projectRoot),
217
+ });
218
+ const projectHead = input.context.projectHead ?? canonicalDigest({ projectIdentity });
219
+ const configHead = input.context.configHead ?? canonicalDigest({ config: null });
220
+ const seed = {
221
+ command: 'operate.init',
222
+ projectIdentity,
223
+ projectHead,
224
+ configHead,
225
+ stage: input.stage,
226
+ questions: input.questions,
227
+ createdAt,
228
+ expiresAt,
229
+ };
230
+ const sessionId = input.sessionId ??
231
+ `GIS-${canonicalDigest(seed).slice('sha256:'.length, 'sha256:'.length + 24)}`;
232
+ const withoutDigest = {
233
+ kind: 'guided-questionnaire',
234
+ schemaVersion: '1.0.0',
235
+ protocolVersion: '1.2.0',
236
+ sessionId,
237
+ questionnaireVersion: '1.0.0',
238
+ command: 'operate.init',
239
+ projectIdentity,
240
+ projectHead,
241
+ configHead,
242
+ adapter: {
243
+ runtime: input.context.runtime ?? 'unknown',
244
+ version: 'detected',
245
+ interaction: input.context.interaction ?? 'none',
246
+ },
247
+ stage: input.stage,
248
+ step: STAGES.indexOf(input.stage) + 1,
249
+ totalSteps: 3,
250
+ title: 'Configure the Operating Board',
251
+ description: input.stage === 'review'
252
+ ? 'Review exact writes and boundaries before applying initialization.'
253
+ : 'Answer only the governance questions in this stage.',
254
+ questions: input.questions,
255
+ createdAt,
256
+ expiresAt,
257
+ };
258
+ const questionnaire = {
259
+ ...withoutDigest,
260
+ digest: canonicalDigest(withoutDigest),
261
+ };
262
+ let validators;
263
+ try {
264
+ validators = await resolveGuidedInteractionValidators();
265
+ }
266
+ catch (error) {
267
+ throw new OperateError(error instanceof Error && error.name === 'E_PIPELINE_NOT_INSTALLED'
268
+ ? 'E_PIPELINE_NOT_INSTALLED'
269
+ : 'E_PIPELINE_VERSION_INCOMPATIBLE', error instanceof Error ? error.message : 'Compatible guided validators are unavailable.');
270
+ }
271
+ const errors = validators.validateGuidedQuestionnaire(questionnaire);
272
+ if (errors.length > 0) {
273
+ throw new OperateError('E_OPERATE_QUESTIONNAIRE_INVALID', 'The generated Operating Board questionnaire did not satisfy Protocol v1.2.', { validationErrors: errors });
274
+ }
275
+ return questionnaire;
276
+ }
277
+ //# sourceMappingURL=question-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-engine.js","sourceRoot":"","sources":["../../../../src/services/operate/interaction/question-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { GuidedQuestion, GuidedQuestionValue, OperatingInitAnswers } from '../types.js';
2
+ export type OperatingInitStage = 'foundation' | 'product-charter' | 'review';
3
+ export interface OperatingQuestionContext {
4
+ gitUserName?: string;
5
+ detectedRuntime?: 'claude' | 'codex' | 'cursor';
6
+ timezone: string;
7
+ availableSources: string[];
8
+ }
9
+ export interface OperatingInitQuestionDefinition {
10
+ stage: OperatingInitStage;
11
+ question: GuidedQuestion;
12
+ read(answers: OperatingInitAnswers): GuidedQuestionValue | undefined;
13
+ write(answers: OperatingInitAnswers, value: GuidedQuestionValue): OperatingInitAnswers;
14
+ }
15
+ export declare function operatingInitQuestionRegistry(context: OperatingQuestionContext): readonly OperatingInitQuestionDefinition[];
16
+ //# sourceMappingURL=question-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-registry.d.ts","sourceRoot":"","sources":["../../../../src/services/operate/interaction/question-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE7F,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAE7E,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,GAAG,SAAS,CAAC;IACrE,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAAC;CACxF;AAuED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,wBAAwB,GAChC,SAAS,+BAA+B,EAAE,CA6U5C"}