openplanr 1.19.0 → 1.20.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 (145) hide show
  1. package/dist/cli/commands/backlog.d.ts.map +1 -1
  2. package/dist/cli/commands/backlog.js +3 -0
  3. package/dist/cli/commands/backlog.js.map +1 -1
  4. package/dist/cli/commands/config.d.ts.map +1 -1
  5. package/dist/cli/commands/config.js +3 -0
  6. package/dist/cli/commands/config.js.map +1 -1
  7. package/dist/cli/commands/epic.d.ts.map +1 -1
  8. package/dist/cli/commands/epic.js +2 -0
  9. package/dist/cli/commands/epic.js.map +1 -1
  10. package/dist/cli/commands/feature.d.ts.map +1 -1
  11. package/dist/cli/commands/feature.js +2 -0
  12. package/dist/cli/commands/feature.js.map +1 -1
  13. package/dist/cli/commands/operate.d.ts +5 -2
  14. package/dist/cli/commands/operate.d.ts.map +1 -1
  15. package/dist/cli/commands/operate.js +10 -101
  16. package/dist/cli/commands/operate.js.map +1 -1
  17. package/dist/cli/commands/plan.d.ts.map +1 -1
  18. package/dist/cli/commands/plan.js +2 -0
  19. package/dist/cli/commands/plan.js.map +1 -1
  20. package/dist/cli/commands/quick.d.ts.map +1 -1
  21. package/dist/cli/commands/quick.js +2 -0
  22. package/dist/cli/commands/quick.js.map +1 -1
  23. package/dist/cli/commands/refine.d.ts.map +1 -1
  24. package/dist/cli/commands/refine.js +2 -0
  25. package/dist/cli/commands/refine.js.map +1 -1
  26. package/dist/cli/commands/revise.d.ts.map +1 -1
  27. package/dist/cli/commands/revise.js +2 -0
  28. package/dist/cli/commands/revise.js.map +1 -1
  29. package/dist/cli/commands/spec.d.ts.map +1 -1
  30. package/dist/cli/commands/spec.js +2 -0
  31. package/dist/cli/commands/spec.js.map +1 -1
  32. package/dist/cli/commands/sprint.d.ts.map +1 -1
  33. package/dist/cli/commands/sprint.js +2 -0
  34. package/dist/cli/commands/sprint.js.map +1 -1
  35. package/dist/cli/commands/story.d.ts.map +1 -1
  36. package/dist/cli/commands/story.js +3 -0
  37. package/dist/cli/commands/story.js.map +1 -1
  38. package/dist/cli/commands/task.d.ts.map +1 -1
  39. package/dist/cli/commands/task.js +3 -0
  40. package/dist/cli/commands/task.js.map +1 -1
  41. package/dist/services/ai-service.d.ts +3 -5
  42. package/dist/services/ai-service.d.ts.map +1 -1
  43. package/dist/services/ai-service.js +7 -1
  44. package/dist/services/ai-service.js.map +1 -1
  45. package/dist/services/credentials-service.d.ts.map +1 -1
  46. package/dist/services/credentials-service.js +2 -0
  47. package/dist/services/credentials-service.js.map +1 -1
  48. package/dist/services/deprecation-notices.d.ts +5 -0
  49. package/dist/services/deprecation-notices.d.ts.map +1 -0
  50. package/dist/services/deprecation-notices.js +6 -0
  51. package/dist/services/deprecation-notices.js.map +1 -0
  52. package/dist/services/operate/advisors.d.ts +144 -166
  53. package/dist/services/operate/advisors.d.ts.map +1 -1
  54. package/dist/services/operate/advisors.js +178 -543
  55. package/dist/services/operate/advisors.js.map +1 -1
  56. package/dist/services/operate/citation-resolution.d.ts.map +1 -1
  57. package/dist/services/operate/citation-resolution.js +50 -1
  58. package/dist/services/operate/citation-resolution.js.map +1 -1
  59. package/dist/services/operate/config.d.ts +18 -52
  60. package/dist/services/operate/config.d.ts.map +1 -1
  61. package/dist/services/operate/config.js +24 -206
  62. package/dist/services/operate/config.js.map +1 -1
  63. package/dist/services/operate/doctor.d.ts +15 -0
  64. package/dist/services/operate/doctor.d.ts.map +1 -1
  65. package/dist/services/operate/doctor.js +142 -32
  66. package/dist/services/operate/doctor.js.map +1 -1
  67. package/dist/services/operate/engine.d.ts +22 -78
  68. package/dist/services/operate/engine.d.ts.map +1 -1
  69. package/dist/services/operate/engine.js +269 -202
  70. package/dist/services/operate/engine.js.map +1 -1
  71. package/dist/services/operate/evidence.d.ts +9 -107
  72. package/dist/services/operate/evidence.d.ts.map +1 -1
  73. package/dist/services/operate/evidence.js +0 -1403
  74. package/dist/services/operate/evidence.js.map +1 -1
  75. package/dist/services/operate/index.d.ts.map +1 -1
  76. package/dist/services/operate/index.js +10 -231
  77. package/dist/services/operate/index.js.map +1 -1
  78. package/dist/services/operate/integrity.d.ts +81 -0
  79. package/dist/services/operate/integrity.d.ts.map +1 -0
  80. package/dist/services/operate/integrity.js +152 -0
  81. package/dist/services/operate/integrity.js.map +1 -0
  82. package/dist/services/operate/interaction/answer-service.d.ts +0 -10
  83. package/dist/services/operate/interaction/answer-service.d.ts.map +1 -1
  84. package/dist/services/operate/interaction/answer-service.js +63 -43
  85. package/dist/services/operate/interaction/answer-service.js.map +1 -1
  86. package/dist/services/operate/interaction/question-engine.d.ts.map +1 -1
  87. package/dist/services/operate/interaction/question-engine.js +105 -21
  88. package/dist/services/operate/interaction/question-engine.js.map +1 -1
  89. package/dist/services/operate/interaction/question-registry.d.ts +16 -1
  90. package/dist/services/operate/interaction/question-registry.d.ts.map +1 -1
  91. package/dist/services/operate/interaction/question-registry.js +45 -39
  92. package/dist/services/operate/interaction/question-registry.js.map +1 -1
  93. package/dist/services/operate/interaction/session-service.d.ts.map +1 -1
  94. package/dist/services/operate/interaction/session-service.js +16 -11
  95. package/dist/services/operate/interaction/session-service.js.map +1 -1
  96. package/dist/services/operate/interaction/terminal-renderer.d.ts.map +1 -1
  97. package/dist/services/operate/interaction/terminal-renderer.js +16 -6
  98. package/dist/services/operate/interaction/terminal-renderer.js.map +1 -1
  99. package/dist/services/operate/maintenance.d.ts +1 -11
  100. package/dist/services/operate/maintenance.d.ts.map +1 -1
  101. package/dist/services/operate/maintenance.js +94 -342
  102. package/dist/services/operate/maintenance.js.map +1 -1
  103. package/dist/services/operate/mission-dispatch.d.ts +73 -55
  104. package/dist/services/operate/mission-dispatch.d.ts.map +1 -1
  105. package/dist/services/operate/mission-dispatch.js +91 -67
  106. package/dist/services/operate/mission-dispatch.js.map +1 -1
  107. package/dist/services/operate/projection-persistence.d.ts.map +1 -1
  108. package/dist/services/operate/projection-persistence.js +22 -2
  109. package/dist/services/operate/projection-persistence.js.map +1 -1
  110. package/dist/services/operate/projection.d.ts.map +1 -1
  111. package/dist/services/operate/projection.js +10 -3
  112. package/dist/services/operate/projection.js.map +1 -1
  113. package/dist/services/operate/protocol.d.ts +1 -41
  114. package/dist/services/operate/protocol.d.ts.map +1 -1
  115. package/dist/services/operate/protocol.js +7 -45
  116. package/dist/services/operate/protocol.js.map +1 -1
  117. package/dist/services/operate/redaction.d.ts +3 -3
  118. package/dist/services/operate/redaction.js +4 -4
  119. package/dist/services/operate/redaction.js.map +1 -1
  120. package/dist/services/operate/reports.d.ts +11 -1
  121. package/dist/services/operate/reports.d.ts.map +1 -1
  122. package/dist/services/operate/reports.js +88 -3
  123. package/dist/services/operate/reports.js.map +1 -1
  124. package/dist/services/operate/types.d.ts +42 -128
  125. package/dist/services/operate/types.d.ts.map +1 -1
  126. package/dist/services/operate/types.js.map +1 -1
  127. package/dist/services/operate/workspace.d.ts +0 -1
  128. package/dist/services/operate/workspace.d.ts.map +1 -1
  129. package/dist/services/operate/workspace.js +0 -2
  130. package/dist/services/operate/workspace.js.map +1 -1
  131. package/dist/services/runtime-manager-service.js +2 -2
  132. package/dist/services/runtime-manager-service.js.map +1 -1
  133. package/package.json +3 -3
  134. package/dist/services/operate/evidence-classifications.d.ts +0 -59
  135. package/dist/services/operate/evidence-classifications.d.ts.map +0 -1
  136. package/dist/services/operate/evidence-classifications.js +0 -132
  137. package/dist/services/operate/evidence-classifications.js.map +0 -1
  138. package/dist/services/operate/evidence-diagnostics.d.ts +0 -23
  139. package/dist/services/operate/evidence-diagnostics.d.ts.map +0 -1
  140. package/dist/services/operate/evidence-diagnostics.js +0 -152
  141. package/dist/services/operate/evidence-diagnostics.js.map +0 -1
  142. package/dist/services/operate/evidence-readiness.d.ts +0 -18
  143. package/dist/services/operate/evidence-readiness.d.ts.map +0 -1
  144. package/dist/services/operate/evidence-readiness.js +0 -94
  145. package/dist/services/operate/evidence-readiness.js.map +0 -1
@@ -1,152 +0,0 @@
1
- import { chmod, mkdir, readdir, readFile, rename, writeFile } from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { resolveGuidedInteractionValidators } from '../pipeline-package-service.js';
4
- import { canonicalDigest, canonicalize, sha256Digest } from './canonical.js';
5
- import { createOperatingAction } from './interaction/action-service.js';
6
- import { currentGuidedSessionBindings } from './interaction/session-service.js';
7
- import { OperateError } from './types.js';
8
- import { resolveOperatingPaths } from './workspace.js';
9
- const CANDIDATE_ID = /^EVC-[A-Za-z0-9._-]{8,128}$/;
10
- function diagnosticDirectory(projectRoot, localRoot) {
11
- return path.join(resolveOperatingPaths(projectRoot, { localRoot }).quarantine, 'diagnostics');
12
- }
13
- function diagnosticPath(projectRoot, candidateId, localRoot) {
14
- if (!CANDIDATE_ID.test(candidateId)) {
15
- throw new OperateError('E_OPERATE_CONFIG_INVALID', 'Evidence candidate ID is invalid.');
16
- }
17
- return path.join(diagnosticDirectory(projectRoot, localRoot), `${candidateId}.json`);
18
- }
19
- function diagnosticSource(item) {
20
- if (item.source === 'file-import') {
21
- return item.location.toLowerCase().endsWith('.csv') ? 'import-csv' : 'import-json';
22
- }
23
- if (['repository', 'planr', 'git', 'github', 'linear'].includes(item.source)) {
24
- return item.source;
25
- }
26
- return 'repository';
27
- }
28
- function safeLocation(item) {
29
- const value = item.location.replaceAll('\\', '/').trim();
30
- if (!value ||
31
- path.posix.isAbsolute(value) ||
32
- /^[A-Za-z]:\//.test(value) ||
33
- value.split('/').includes('..') ||
34
- /(?:\/Users\/|\/home\/|[A-Za-z]:\/Users\/)/i.test(value)) {
35
- return undefined;
36
- }
37
- return value.slice(0, 4_096);
38
- }
39
- async function atomicDiagnosticWrite(projectRoot, diagnostic, localRoot) {
40
- const validators = await resolveGuidedInteractionValidators();
41
- if (validators.validateEvidenceDiagnostic(diagnostic).length > 0) {
42
- throw new OperateError('E_OPERATE_CONFIG_INVALID', `Evidence diagnostic ${diagnostic.candidateId} failed Protocol v1.2 validation.`);
43
- }
44
- const target = diagnosticPath(projectRoot, diagnostic.candidateId, localRoot);
45
- await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
46
- const temporary = `${target}.${process.pid}.tmp`;
47
- await writeFile(temporary, `${canonicalize(diagnostic)}\n`, { mode: 0o600 });
48
- await rename(temporary, target);
49
- await chmod(target, 0o600);
50
- }
51
- export async function createEvidenceDiagnostic(input) {
52
- const bindings = await currentGuidedSessionBindings(input.projectRoot);
53
- const contentDigest = sha256Digest(input.item.content);
54
- const candidateId = `EVC-${canonicalDigest({
55
- source: input.item.source,
56
- componentId: input.item.repository?.componentId ?? 'control',
57
- location: input.item.location,
58
- line: input.detection.line,
59
- ruleId: input.detection.ruleId,
60
- contentDigest,
61
- projectHead: bindings.projectHead,
62
- }).slice('sha256:'.length, 'sha256:'.length + 24)}`;
63
- const componentId = input.item.repository?.componentId ?? 'control';
64
- const diagnose = await createOperatingAction({
65
- id: 'operate.evidence.diagnose',
66
- label: 'Inspect the safe evidence diagnostic',
67
- command: `planr operate evidence diagnose ${candidateId}`,
68
- effect: 'read-only',
69
- recommended: true,
70
- });
71
- const classify = await createOperatingAction({
72
- id: 'operate.evidence.classify',
73
- label: 'Review an eligible exact false-positive classification',
74
- command: `planr operate evidence classify ${candidateId}`,
75
- effect: 'machine-local-write',
76
- confirmation: {
77
- sessionId: `GIS-evidence-${candidateId.slice('EVC-'.length)}`,
78
- confirmationScope: `operate.evidence.classify:${candidateId}`,
79
- projectIdentity: bindings.projectIdentity,
80
- projectHead: bindings.projectHead,
81
- configHead: bindings.configHead,
82
- eventHead: null,
83
- arguments: [
84
- input.detection.ruleId,
85
- contentDigest,
86
- canonicalDigest({ location: safeLocation(input.item) ?? null }),
87
- ],
88
- destinations: [],
89
- writes: [`evidence-diagnostics/${candidateId}.json`],
90
- },
91
- });
92
- const diagnostic = {
93
- kind: 'evidence-diagnostic',
94
- schemaVersion: '1.0.0',
95
- protocolVersion: '1.2.0',
96
- candidateId,
97
- source: diagnosticSource(input.item),
98
- componentId,
99
- ...(safeLocation(input.item) ? { location: safeLocation(input.item) } : {}),
100
- ...(Number.isInteger(input.detection.line) ? { line: input.detection.line } : {}),
101
- ruleId: input.detection.ruleId,
102
- category: input.detection.category,
103
- contentDigest,
104
- projectHead: bindings.projectHead,
105
- valueDisclosed: false,
106
- actions: [diagnose.action, classify.action],
107
- };
108
- const existing = await readEvidenceDiagnostic({
109
- projectRoot: input.projectRoot,
110
- candidateId,
111
- localRoot: input.localRoot,
112
- }).catch(() => null);
113
- if (existing &&
114
- existing.ruleId === diagnostic.ruleId &&
115
- existing.contentDigest === diagnostic.contentDigest &&
116
- existing.projectHead === diagnostic.projectHead) {
117
- return existing;
118
- }
119
- await atomicDiagnosticWrite(input.projectRoot, diagnostic, input.localRoot);
120
- return diagnostic;
121
- }
122
- export async function readEvidenceDiagnostic(input) {
123
- const target = diagnosticPath(input.projectRoot, input.candidateId, input.localRoot);
124
- try {
125
- const diagnostic = JSON.parse(await readFile(target, 'utf8'));
126
- const validators = await resolveGuidedInteractionValidators();
127
- if (validators.validateEvidenceDiagnostic(diagnostic).length > 0)
128
- throw new Error('invalid');
129
- return diagnostic;
130
- }
131
- catch {
132
- throw new OperateError('E_OPERATE_STATE_INVALID', `Evidence diagnostic ${input.candidateId} is unavailable or invalid.`);
133
- }
134
- }
135
- export async function listEvidenceDiagnostics(input) {
136
- const directory = diagnosticDirectory(input.projectRoot, input.localRoot);
137
- const names = (await readdir(directory).catch(() => []))
138
- .filter((name) => /^EVC-[A-Za-z0-9._-]+\.json$/.test(name))
139
- .sort();
140
- const diagnostics = [];
141
- for (const name of names) {
142
- diagnostics.push(await readEvidenceDiagnostic({
143
- ...input,
144
- candidateId: name.slice(0, -'.json'.length),
145
- }));
146
- }
147
- return diagnostics;
148
- }
149
- export async function writeEvidenceDiagnostic(input) {
150
- await atomicDiagnosticWrite(input.projectRoot, input.diagnostic, input.localRoot);
151
- }
152
- //# sourceMappingURL=evidence-diagnostics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evidence-diagnostics.js","sourceRoot":"","sources":["../../../src/services/operate/evidence-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { type OperatingEvidence, type OperatingEvidenceIndexItem, type OperatingEvidenceReadiness, type OperatingRoleId } from './types.js';
2
- export declare function evaluateEvidenceReadiness(input: {
3
- cycleId: string;
4
- evidence: OperatingEvidence;
5
- enabledRoles: OperatingRoleId[];
6
- now?: Date;
7
- /**
8
- * FR2: the POST-index evidence view a mission-mode role's packet is actually
9
- * built from. When provided, a `repository` requirement is additionally capped
10
- * by the number of repository items that survived the mission index — so a role
11
- * whose repository items were all dropped by the dot-prefixed/pattern filter is
12
- * gated not-ready instead of dispatching "ready" against a pre-index item set
13
- * that no bounded mission packet can reference. Omitting it preserves the
14
- * pre-index behaviour for the standard (pack-mode) engine path.
15
- */
16
- missionEvidenceIndex?: readonly OperatingEvidenceIndexItem[];
17
- }): Promise<OperatingEvidenceReadiness>;
18
- //# sourceMappingURL=evidence-readiness.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evidence-readiness.d.ts","sourceRoot":"","sources":["../../../src/services/operate/evidence-readiness.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAgBpB,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,GAAG,CAAC,EAAE,IAAI,CAAC;IACX;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC9D,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAyGtC"}
@@ -1,94 +0,0 @@
1
- import { canonicalDigest } from './canonical.js';
2
- import { assertOperatingArtifact, loadOperatingProtocol } from './protocol.js';
3
- import { compareSensitivity, prepareAdvisorEvidenceText } from './redaction.js';
4
- import { OPERATE_PROTOCOL_VERSION, OPERATE_SCHEMA_VERSION, } from './types.js';
5
- function ageHours(iso, now) {
6
- return Math.max(0, (now.getTime() - Date.parse(iso)) / (60 * 60 * 1_000));
7
- }
8
- export async function evaluateEvidenceReadiness(input) {
9
- const now = input.now ?? new Date();
10
- const registry = (await loadOperatingProtocol()).listOperatingRoles();
11
- const postIndexRepositoryCount = input.missionEvidenceIndex
12
- ? input.missionEvidenceIndex.filter((item) => item.source === 'repository').length
13
- : null;
14
- const eligibleItems = input.evidence.items.filter((item) => !prepareAdvisorEvidenceText({
15
- evidenceId: item.id,
16
- digest: item.digest,
17
- value: item.summary ?? '',
18
- }).quarantined);
19
- let gapNumber = 1;
20
- const roles = input.enabledRoles.map((roleId) => {
21
- const role = registry.find((entry) => entry.id === roleId);
22
- const configured = role?.minimumEvidence.requirements ?? [
23
- {
24
- source: 'repository',
25
- claimTypes: ['code'],
26
- minimumItems: 1,
27
- maxAgeHours: 168,
28
- observationWindow: 'current-state',
29
- sensitivityCeiling: 'internal',
30
- },
31
- ];
32
- const requirements = configured.map((requirement) => {
33
- const matching = eligibleItems.filter((item) => item.source === requirement.source &&
34
- requirement.claimTypes.some((claim) => item.claimTypes.includes(claim)) &&
35
- compareSensitivity(item.sensitivity, requirement.sensitivityCeiling) <= 0);
36
- const oldestAgeHours = matching.length > 0
37
- ? Math.max(...matching.map((item) => ageHours(item.collectedAt, now)))
38
- : null;
39
- // FR2: for a mission-mode evaluation, a `repository` requirement can be
40
- // satisfied only by repository items the mission index actually retained —
41
- // dot-prefixed/pattern-dropped repository items are unreachable by a bounded
42
- // mission packet, so they cannot count toward readiness.
43
- const observedItems = postIndexRepositoryCount !== null && requirement.source === 'repository'
44
- ? Math.min(matching.length, postIndexRepositoryCount)
45
- : matching.length;
46
- const satisfied = observedItems >= requirement.minimumItems &&
47
- oldestAgeHours !== null &&
48
- oldestAgeHours <= requirement.maxAgeHours &&
49
- (requirement.observationWindow === 'current-state' ||
50
- requirement.observationWindow === 'current-cycle' ||
51
- matching.some((item) => item.observedFrom && item.observedTo));
52
- return {
53
- ...structuredClone(requirement),
54
- observedItems,
55
- oldestAgeHours,
56
- satisfied,
57
- };
58
- });
59
- const ready = (role?.minimumEvidence.match ?? 'all') === 'any'
60
- ? requirements.some((requirement) => requirement.satisfied)
61
- : requirements.every((requirement) => requirement.satisfied);
62
- const gapId = ready ? null : `GAP-${String(gapNumber++).padStart(3, '0')}`;
63
- return {
64
- roleId,
65
- readiness: ready ? 'ready' : 'not_evaluated',
66
- requirements,
67
- missingEvidence: requirements
68
- .filter((requirement) => !requirement.satisfied)
69
- .map((requirement) => `${requirement.source}:${requirement.claimTypes.join('+')} (${requirement.observedItems}/${requirement.minimumItems})`),
70
- evidenceRefs: eligibleItems
71
- .filter((item) => requirements.some((requirement) => requirement.source === item.source &&
72
- requirement.claimTypes.some((claim) => item.claimTypes.includes(claim))))
73
- .map((item) => item.id)
74
- .sort(),
75
- modelCallAllowed: ready,
76
- gapId,
77
- };
78
- });
79
- const readiness = {
80
- kind: 'operating-evidence-readiness',
81
- schemaVersion: OPERATE_SCHEMA_VERSION,
82
- protocolVersion: OPERATE_PROTOCOL_VERSION,
83
- cycleId: input.cycleId,
84
- inputDigest: canonicalDigest({
85
- evidence: input.evidence.fingerprint,
86
- roles: input.enabledRoles,
87
- advisorEligibleEvidenceRefs: eligibleItems.map((item) => item.id).sort(),
88
- }),
89
- evaluatedAt: now.toISOString(),
90
- roles,
91
- };
92
- return assertOperatingArtifact('operating-evidence-readiness', readiness);
93
- }
94
- //# sourceMappingURL=evidence-readiness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evidence-readiness.js","sourceRoot":"","sources":["../../../src/services/operate/evidence-readiness.ts"],"names":[],"mappings":"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"}