scene-capability-engine 3.6.65 → 3.6.67
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.
- package/CHANGELOG.md +16 -0
- package/README.md +17 -6
- package/README.zh.md +18 -6
- package/bin/scene-capability-engine.js +4 -0
- package/docs/README.md +2 -2
- package/docs/command-reference.md +382 -6
- package/docs/document-governance.md +3 -2
- package/docs/integration-modes.md +62 -478
- package/docs/integration-philosophy.md +56 -263
- package/docs/magicball-project-portfolio-contract.md +114 -2
- package/docs/project-management/README.md +14 -0
- package/docs/project-management/assurance/backup.md +3 -0
- package/docs/project-management/assurance/config.md +3 -0
- package/docs/project-management/assurance/evidence/README.md +3 -0
- package/docs/project-management/assurance/incidents/README.md +3 -0
- package/docs/project-management/assurance/logs.md +3 -0
- package/docs/project-management/assurance/overview.md +3 -0
- package/docs/project-management/assurance/recovery/README.md +3 -0
- package/docs/project-management/assurance/resource.md +3 -0
- package/docs/project-management/assurance/runbooks/README.md +3 -0
- package/docs/project-management/delivery/acceptance/README.md +3 -0
- package/docs/project-management/delivery/acceptance/evidence/README.md +3 -0
- package/docs/project-management/delivery/acceptance/exceptions/README.md +3 -0
- package/docs/project-management/delivery/acceptance/reports/README.md +3 -0
- package/docs/project-management/delivery/documents/changes.md +3 -0
- package/docs/project-management/delivery/documents/issues.md +3 -0
- package/docs/project-management/delivery/documents/overview.md +3 -0
- package/docs/project-management/delivery/documents/planning.md +3 -0
- package/docs/project-management/delivery/documents/requirements.md +3 -0
- package/docs/project-management/delivery/documents/tracking.md +3 -0
- package/docs/project-management/delivery/handoffs/README.md +3 -0
- package/docs/project-management/delivery/handoffs/evidence/README.md +3 -0
- package/docs/project-management/delivery/handoffs/records/README.md +3 -0
- package/docs/project-management/delivery/overview.md +10 -0
- package/docs/project-management/delivery/releases/README.md +3 -0
- package/docs/project-management/delivery/releases/baselines/README.md +3 -0
- package/docs/project-management/delivery/releases/evidence/README.md +3 -0
- package/docs/project-management/delivery/tables/changes.md +3 -0
- package/docs/project-management/delivery/tables/issues.md +3 -0
- package/docs/project-management/delivery/tables/planning.md +3 -0
- package/docs/project-management/delivery/tables/requirements.md +3 -0
- package/docs/project-management/delivery/tables/tracking.md +3 -0
- package/docs/project-management/environment/agent-discovery.md +3 -0
- package/docs/project-management/environment/development.md +3 -0
- package/docs/project-management/environment/overview.md +10 -0
- package/docs/project-management/environment/testing.md +3 -0
- package/docs/project-management/environment/version-alignment.md +3 -0
- package/docs/quick-start-with-ai-tools.md +68 -308
- package/docs/releases/README.md +2 -0
- package/docs/releases/v3.6.66.md +23 -0
- package/docs/releases/v3.6.67.md +23 -0
- package/docs/steering-governance.md +64 -2
- package/docs/zh/README.md +2 -2
- package/docs/zh/releases/README.md +2 -0
- package/docs/zh/releases/v3.6.66.md +23 -0
- package/docs/zh/releases/v3.6.67.md +23 -0
- package/lib/commands/adopt.js +24 -0
- package/lib/commands/native.js +158 -0
- package/lib/commands/project.js +95 -0
- package/lib/commands/semantic.js +1459 -0
- package/lib/commands/session.js +74 -3
- package/lib/commands/spec-bootstrap.js +10 -1
- package/lib/commands/spec-gate.js +10 -1
- package/lib/commands/spec-pipeline.js +10 -1
- package/lib/commands/studio.js +405 -30
- package/lib/commands/task.js +141 -7
- package/lib/governance/supreme-principles.js +530 -0
- package/lib/problem/problem-evaluator.js +4 -0
- package/lib/project/candidate-inspection-service.js +24 -1
- package/lib/project/portfolio-projection-service.js +315 -5
- package/lib/project/project-channel-output.js +94 -0
- package/lib/project/project-channel-projection.js +181 -0
- package/lib/project/root-onboarding-service.js +60 -8
- package/lib/project/semantic-shared-source-projection.js +150 -0
- package/lib/project/supervision-action-model.js +277 -0
- package/lib/project/supervision-projection-service.js +305 -5
- package/lib/project/target-resolution-service.js +70 -5
- package/lib/project/visibility-policy.js +93 -0
- package/lib/runtime/multi-spec-scene-session.js +8 -1
- package/lib/runtime/project-channel-context-store.js +387 -0
- package/lib/runtime/project-channel-context.js +406 -0
- package/lib/runtime/scene-session-binding.js +46 -0
- package/lib/runtime/session-store.js +186 -0
- package/lib/runtime/steering-contract.js +7 -1
- package/lib/semantic/archive-report.js +283 -0
- package/lib/semantic/archive-routing.js +67 -0
- package/lib/semantic/backflow-report.js +245 -0
- package/lib/semantic/capability-contract.js +30 -0
- package/lib/semantic/delta-export.js +145 -0
- package/lib/semantic/interaction-observer.js +254 -0
- package/lib/semantic/kernel-loader.js +881 -0
- package/lib/semantic/native-runtime.js +359 -0
- package/lib/semantic/progress-ledger.js +433 -0
- package/lib/semantic/replay-evaluator.js +382 -0
- package/lib/semantic/shared-publication.js +592 -0
- package/lib/semantic/shared-source-config.js +183 -0
- package/lib/semantic/shared-source-connect.js +139 -0
- package/lib/semantic/shared-source-discovery.js +98 -0
- package/lib/semantic/shared-sync-export.js +413 -0
- package/lib/semantic/shared-sync-intake.js +592 -0
- package/lib/semantic/shared-sync-merge.js +547 -0
- package/lib/semantic/shared-sync-release.js +463 -0
- package/lib/semantic/supreme-intent-report.js +300 -0
- package/lib/state/sce-state-store.js +1360 -0
- package/lib/steering/context-sync-manager.js +276 -25
- package/lib/studio/spec-intake-governor.js +39 -3
- package/lib/studio/task-envelope.js +35 -2
- package/lib/workspace/takeover-baseline.js +342 -83
- package/package.json +7 -2
- package/scripts/agent-governance-baseline-audit.js +395 -0
- package/scripts/clarification-first-audit.js +9 -9
- package/scripts/deprecated-entry-audit.js +240 -0
- package/scripts/release-posture-report.js +262 -0
- package/template/.sce/README.md +62 -228
- package/template/.sce/config/semantic-shared-sources.json +5 -0
- package/template/.sce/config/supreme-principles-policy.json +105 -0
- package/template/.sce/config/takeover-baseline.json +7 -0
- package/template/.sce/steering/CORE_PRINCIPLES.md +23 -63
- package/template/.sce/steering/CURRENT_CONTEXT.md +4 -0
- package/template/.sce/steering/RULES_GUIDE.md +17 -9
- package/template/README.md +32 -96
package/lib/commands/session.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const chalk = require('chalk');
|
|
2
2
|
const { SessionStore } = require('../runtime/session-store');
|
|
3
3
|
const { captureTimelineCheckpoint } = require('../runtime/project-timeline');
|
|
4
|
+
const { buildProjectChannelOutput } = require('../project/project-channel-output');
|
|
4
5
|
|
|
5
6
|
function registerSessionCommands(program) {
|
|
6
7
|
const session = program
|
|
@@ -13,6 +14,11 @@ function registerSessionCommands(program) {
|
|
|
13
14
|
.option('--tool <tool>', 'Target tool (codex|claude|cursor|generic)', 'generic')
|
|
14
15
|
.option('--agent-version <version>', 'Target agent version for compatibility tracking')
|
|
15
16
|
.option('--id <id>', 'Custom session id')
|
|
17
|
+
.option('--project-id <projectId>', 'Bind session to a project-local collaboration context')
|
|
18
|
+
.option('--channel <channelId>', 'Bind session to a collaboration channel')
|
|
19
|
+
.option('--scene <sceneId>', 'Channel-local active scene override')
|
|
20
|
+
.option('--spec <specId>', 'Channel-local active spec override')
|
|
21
|
+
.option('--doc <docId>', 'Channel-local active doc override')
|
|
16
22
|
.option('--json', 'Output as JSON')
|
|
17
23
|
.action(async (objective, options) => {
|
|
18
24
|
try {
|
|
@@ -31,7 +37,8 @@ function registerSessionCommands(program) {
|
|
|
31
37
|
objective: objective || '',
|
|
32
38
|
sessionId: options.id,
|
|
33
39
|
});
|
|
34
|
-
|
|
40
|
+
const metadata = await _maybeBindProjectChannel(store, created.session_id, options);
|
|
41
|
+
_printSessionResult('session_start', created, options.json, metadata);
|
|
35
42
|
} catch (error) {
|
|
36
43
|
_exitWithError(error, options.json);
|
|
37
44
|
}
|
|
@@ -41,6 +48,11 @@ function registerSessionCommands(program) {
|
|
|
41
48
|
.command('resume [sessionRef]')
|
|
42
49
|
.description('Resume a session by id, or use latest by default')
|
|
43
50
|
.option('--status <status>', 'Status to set after resume', 'active')
|
|
51
|
+
.option('--project-id <projectId>', 'Bind resumed session to a project-local collaboration context')
|
|
52
|
+
.option('--channel <channelId>', 'Bind resumed session to a collaboration channel')
|
|
53
|
+
.option('--scene <sceneId>', 'Channel-local active scene override')
|
|
54
|
+
.option('--spec <specId>', 'Channel-local active spec override')
|
|
55
|
+
.option('--doc <docId>', 'Channel-local active doc override')
|
|
44
56
|
.option('--json', 'Output as JSON')
|
|
45
57
|
.action(async (sessionRef, options) => {
|
|
46
58
|
try {
|
|
@@ -57,7 +69,8 @@ function registerSessionCommands(program) {
|
|
|
57
69
|
const resumed = await store.resumeSession(sessionRef || 'latest', {
|
|
58
70
|
status: options.status,
|
|
59
71
|
});
|
|
60
|
-
|
|
72
|
+
const metadata = await _maybeBindProjectChannel(store, resumed.session_id, options);
|
|
73
|
+
_printSessionResult('session_resume', resumed, options.json, metadata);
|
|
61
74
|
} catch (error) {
|
|
62
75
|
_exitWithError(error, options.json);
|
|
63
76
|
}
|
|
@@ -97,15 +110,19 @@ function registerSessionCommands(program) {
|
|
|
97
110
|
session
|
|
98
111
|
.command('show [sessionRef]')
|
|
99
112
|
.description('Show a session by id, or latest by default')
|
|
113
|
+
.option('--project-id <projectId>', 'Also resolve the project/channel snapshot')
|
|
114
|
+
.option('--channel <channelId>', 'Project channel id for channel-scoped recovery')
|
|
100
115
|
.option('--json', 'Output as JSON')
|
|
101
116
|
.action(async (sessionRef, options) => {
|
|
102
117
|
try {
|
|
103
118
|
const store = new SessionStore(process.cwd());
|
|
104
119
|
const current = await store.getSession(sessionRef || 'latest');
|
|
105
120
|
const sceneIndex = await store.getSceneIndexDiagnostics();
|
|
121
|
+
const projectChannel = await _maybeResolveProjectChannel(store, options);
|
|
106
122
|
_printSessionResult('session_show', current, options.json, {
|
|
107
123
|
session_source: 'file',
|
|
108
|
-
scene_index: sceneIndex
|
|
124
|
+
scene_index: sceneIndex,
|
|
125
|
+
...projectChannel
|
|
109
126
|
});
|
|
110
127
|
} catch (error) {
|
|
111
128
|
_exitWithError(error, options.json);
|
|
@@ -179,6 +196,9 @@ function _printSessionResult(action, session, asJson = false, metadata = {}) {
|
|
|
179
196
|
if (metadata.scene_index && metadata.scene_index.status) {
|
|
180
197
|
console.log(chalk.gray(`Scene index consistency: ${metadata.scene_index.status}`));
|
|
181
198
|
}
|
|
199
|
+
if (metadata.project_channel && metadata.project_channel.project_id) {
|
|
200
|
+
console.log(chalk.gray(`Project channel: ${metadata.project_channel.project_id} / ${metadata.project_channel.channel_id || metadata.project_channel.focused_channel_id || 'n/a'}`));
|
|
201
|
+
}
|
|
182
202
|
}
|
|
183
203
|
|
|
184
204
|
function _printSessionListResult(action, sessions, asJson = false, metadata = {}) {
|
|
@@ -219,6 +239,57 @@ function _exitWithError(error, asJson = false) {
|
|
|
219
239
|
process.exit(1);
|
|
220
240
|
}
|
|
221
241
|
|
|
242
|
+
async function _maybeBindProjectChannel(store, sessionId, options = {}) {
|
|
243
|
+
const projectId = `${options.projectId || ''}`.trim();
|
|
244
|
+
const channelId = `${options.channel || ''}`.trim();
|
|
245
|
+
if (!projectId || !channelId) {
|
|
246
|
+
return {};
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const bound = await store.bindSessionToProjectChannel(sessionId, {
|
|
250
|
+
projectId,
|
|
251
|
+
channelId,
|
|
252
|
+
activeScene: options.scene,
|
|
253
|
+
activeSpecId: options.spec,
|
|
254
|
+
activeDoc: options.doc,
|
|
255
|
+
focus: true,
|
|
256
|
+
syncCurrentContext: true
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
return {
|
|
260
|
+
project_channel: buildProjectChannelOutput({
|
|
261
|
+
projectId,
|
|
262
|
+
canonicalProjectId: projectId,
|
|
263
|
+
requestedChannelId: channelId,
|
|
264
|
+
storageMode: 'split',
|
|
265
|
+
context: bound.context,
|
|
266
|
+
channel: bound.channel
|
|
267
|
+
})
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
async function _maybeResolveProjectChannel(store, options = {}) {
|
|
272
|
+
const projectId = `${options.projectId || ''}`.trim();
|
|
273
|
+
if (!projectId) {
|
|
274
|
+
return {};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const resolved = await store.getProjectChannelSession(projectId, options.channel || null);
|
|
278
|
+
return {
|
|
279
|
+
project_channel: buildProjectChannelOutput({
|
|
280
|
+
projectId,
|
|
281
|
+
canonicalProjectId: projectId,
|
|
282
|
+
requestedChannelId: options.channel || null,
|
|
283
|
+
storageMode: resolved.storageMode,
|
|
284
|
+
contextAvailable: resolved.contextAvailable,
|
|
285
|
+
context: resolved.context,
|
|
286
|
+
channel: resolved.channel,
|
|
287
|
+
session: resolved.session,
|
|
288
|
+
resolvedChannelId: resolved.resolvedChannelId
|
|
289
|
+
})
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
|
|
222
293
|
module.exports = {
|
|
223
294
|
registerSessionCommands,
|
|
224
295
|
};
|
|
@@ -30,6 +30,8 @@ async function runSpecBootstrap(options = {}, dependencies = {}) {
|
|
|
30
30
|
return bindMultiSpecSceneSession({
|
|
31
31
|
specTargets,
|
|
32
32
|
sceneId: options.scene,
|
|
33
|
+
projectId: options.projectId,
|
|
34
|
+
collabChannel: options.collabChannel,
|
|
33
35
|
commandName: 'spec-bootstrap',
|
|
34
36
|
commandLabel: 'Multi-spec bootstrap',
|
|
35
37
|
commandOptions: options,
|
|
@@ -75,6 +77,8 @@ async function runSpecBootstrap(options = {}, dependencies = {}) {
|
|
|
75
77
|
|
|
76
78
|
const sceneBinding = await resolveSpecSceneBinding({
|
|
77
79
|
sceneId: options.scene,
|
|
80
|
+
projectId: options.projectId,
|
|
81
|
+
collabChannel: options.collabChannel,
|
|
78
82
|
allowNoScene: false
|
|
79
83
|
}, {
|
|
80
84
|
projectPath,
|
|
@@ -169,7 +173,10 @@ async function runSpecBootstrap(options = {}, dependencies = {}) {
|
|
|
169
173
|
}
|
|
170
174
|
: {
|
|
171
175
|
bound: false
|
|
172
|
-
}
|
|
176
|
+
},
|
|
177
|
+
...(sceneBinding && sceneBinding.project_channel
|
|
178
|
+
? { project_channel: sceneBinding.project_channel }
|
|
179
|
+
: {})
|
|
173
180
|
};
|
|
174
181
|
|
|
175
182
|
if (specSession) {
|
|
@@ -213,6 +220,8 @@ function registerSpecBootstrapCommand(program) {
|
|
|
213
220
|
.option('--template <template-id>', 'Template hint for draft generation')
|
|
214
221
|
.option('--profile <profile-id>', 'Profile for default generation strategy')
|
|
215
222
|
.option('--scene <scene-id>', 'Bind this spec bootstrap as a child session of an active scene')
|
|
223
|
+
.option('--project-id <project-id>', 'Recover scene binding from one project-local collaboration context')
|
|
224
|
+
.option('--collab-channel <channel-id>', 'Recover scene binding from one collaboration channel')
|
|
216
225
|
.option('--non-interactive', 'Disable prompts and use arguments/defaults only')
|
|
217
226
|
.option('--dry-run', 'Preview generation result without writing files')
|
|
218
227
|
.option('--json', 'Output machine-readable JSON')
|
|
@@ -32,6 +32,8 @@ async function runSpecGate(options = {}, dependencies = {}) {
|
|
|
32
32
|
return bindMultiSpecSceneSession({
|
|
33
33
|
specTargets,
|
|
34
34
|
sceneId: options.scene,
|
|
35
|
+
projectId: options.projectId,
|
|
36
|
+
collabChannel: options.collabChannel,
|
|
35
37
|
commandName: 'spec-gate',
|
|
36
38
|
commandLabel: 'Multi-spec gate',
|
|
37
39
|
commandOptions: options,
|
|
@@ -59,6 +61,8 @@ async function runSpecGate(options = {}, dependencies = {}) {
|
|
|
59
61
|
|
|
60
62
|
const sceneBinding = await resolveSpecSceneBinding({
|
|
61
63
|
sceneId: options.scene,
|
|
64
|
+
projectId: options.projectId,
|
|
65
|
+
collabChannel: options.collabChannel,
|
|
62
66
|
allowNoScene: false
|
|
63
67
|
}, {
|
|
64
68
|
projectPath,
|
|
@@ -127,7 +131,10 @@ async function runSpecGate(options = {}, dependencies = {}) {
|
|
|
127
131
|
scene_session_id: sceneBinding.scene_session_id,
|
|
128
132
|
spec_session_id: specSession.session_id,
|
|
129
133
|
binding_source: sceneBinding.source
|
|
130
|
-
}
|
|
134
|
+
},
|
|
135
|
+
...(sceneBinding.project_channel
|
|
136
|
+
? { project_channel: sceneBinding.project_channel }
|
|
137
|
+
: {})
|
|
131
138
|
};
|
|
132
139
|
} catch (error) {
|
|
133
140
|
await sessionStore.completeSpecSession({
|
|
@@ -215,6 +222,8 @@ function registerSpecGateCommand(program) {
|
|
|
215
222
|
.option('--spec <name>', 'Single Spec identifier')
|
|
216
223
|
.option('--specs <names>', 'Comma-separated Spec identifiers (multi-spec defaults to orchestrate mode)')
|
|
217
224
|
.option('--scene <scene-id>', 'Bind this spec gate run as a child session of an active scene')
|
|
225
|
+
.option('--project-id <project-id>', 'Recover scene binding from one project-local collaboration context')
|
|
226
|
+
.option('--collab-channel <channel-id>', 'Recover scene binding from one collaboration channel')
|
|
218
227
|
.option('--policy <path>', 'Policy JSON path')
|
|
219
228
|
.option('--strict', 'Enable strict mode override')
|
|
220
229
|
.option('--json', 'Output machine-readable JSON')
|
|
@@ -29,6 +29,8 @@ async function runSpecPipeline(options = {}, dependencies = {}) {
|
|
|
29
29
|
return bindMultiSpecSceneSession({
|
|
30
30
|
specTargets,
|
|
31
31
|
sceneId: options.scene,
|
|
32
|
+
projectId: options.projectId,
|
|
33
|
+
collabChannel: options.collabChannel,
|
|
32
34
|
commandName: 'spec-pipeline',
|
|
33
35
|
commandLabel: 'Multi-spec pipeline',
|
|
34
36
|
commandOptions: options,
|
|
@@ -56,6 +58,8 @@ async function runSpecPipeline(options = {}, dependencies = {}) {
|
|
|
56
58
|
|
|
57
59
|
const sceneBinding = await resolveSpecSceneBinding({
|
|
58
60
|
sceneId: options.scene,
|
|
61
|
+
projectId: options.projectId,
|
|
62
|
+
collabChannel: options.collabChannel,
|
|
59
63
|
allowNoScene: false
|
|
60
64
|
}, {
|
|
61
65
|
projectPath,
|
|
@@ -150,7 +154,10 @@ async function runSpecPipeline(options = {}, dependencies = {}) {
|
|
|
150
154
|
}
|
|
151
155
|
: {
|
|
152
156
|
bound: false
|
|
153
|
-
}
|
|
157
|
+
},
|
|
158
|
+
...(sceneBinding && sceneBinding.project_channel
|
|
159
|
+
? { project_channel: sceneBinding.project_channel }
|
|
160
|
+
: {})
|
|
154
161
|
};
|
|
155
162
|
|
|
156
163
|
if (specSession) {
|
|
@@ -199,6 +206,8 @@ function registerSpecPipelineCommand(program) {
|
|
|
199
206
|
.option('--spec <name>', 'Single Spec identifier')
|
|
200
207
|
.option('--specs <names>', 'Comma-separated Spec identifiers (multi-spec defaults to orchestrate mode)')
|
|
201
208
|
.option('--scene <scene-id>', 'Bind this spec pipeline run as a child session of an active scene')
|
|
209
|
+
.option('--project-id <project-id>', 'Recover scene binding from one project-local collaboration context')
|
|
210
|
+
.option('--collab-channel <channel-id>', 'Recover scene binding from one collaboration channel')
|
|
202
211
|
.option('--from-stage <stage>', 'Start stage (requirements/design/tasks/gate)')
|
|
203
212
|
.option('--to-stage <stage>', 'End stage (requirements/design/tasks/gate)')
|
|
204
213
|
.option('--resume', 'Resume from latest unfinished stage state')
|