@gajae-code/coding-agent 0.18.6 → 0.18.8
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 +318 -1
- package/dist/types/async/job-manager.d.ts +1 -1
- package/dist/types/capability/mcp.d.ts +2 -0
- package/dist/types/capability/skill.d.ts +2 -0
- package/dist/types/capability/types.d.ts +6 -0
- package/dist/types/cli/public-command-errors.d.ts +3 -1
- package/dist/types/cli/setup-cli.d.ts +1 -1
- package/dist/types/commands/deep-interview.d.ts +3 -0
- package/dist/types/config/autorouting-tier-map.d.ts +348 -9
- package/dist/types/config/file-lock.d.ts +1 -0
- package/dist/types/config/model-bindings-applier.d.ts +2 -0
- package/dist/types/config/model-profile-activation.d.ts +11 -3
- package/dist/types/config/model-registry.d.ts +4 -9
- package/dist/types/config/settings.d.ts +4 -0
- package/dist/types/config/skill-settings-defaults.d.ts +2 -0
- package/dist/types/cursor-delete-path.d.ts +1 -0
- package/dist/types/cursor-mcp-name.d.ts +8 -0
- package/dist/types/customization/inventory.d.ts +2 -0
- package/dist/types/debug/report-bundle-parent.d.ts +2 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.d.ts +1 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.d.ts +31 -0
- package/dist/types/defaults/gjc-skills.generated.d.ts +5 -6
- package/dist/types/discovery/helpers.d.ts +8 -3
- package/dist/types/export/html/css-color.d.ts +2 -0
- package/dist/types/export/html/template.generated.d.ts +1 -1
- package/dist/types/extensibility/extensions/types.d.ts +7 -0
- package/dist/types/extensibility/gjc-plugins/runtime-adapters.d.ts +14 -1
- package/dist/types/extensibility/plugins/marketplace/cache.d.ts +2 -0
- package/dist/types/extensibility/plugins/plugin-link-path.d.ts +2 -0
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +3 -1
- package/dist/types/extensibility/skill-management.d.ts +3 -1
- package/dist/types/extensibility/skills.d.ts +2 -0
- package/dist/types/gjc-runtime/deep-interview-crystallize.d.ts +74 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +11 -0
- package/dist/types/gjc-runtime/gc-runtime.d.ts +5 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +0 -5
- package/dist/types/gjc-runtime/state-argv.d.ts +1 -1
- package/dist/types/gjc-runtime/state-migrations.d.ts +8 -0
- package/dist/types/gjc-runtime/state-runtime.d.ts +95 -0
- package/dist/types/gjc-runtime/state-writer.d.ts +11 -1
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -0
- package/dist/types/internal-urls/skill-path.d.ts +1 -0
- package/dist/types/lsp/workspace-path.d.ts +1 -0
- package/dist/types/modes/acp/acp-agent.d.ts +7 -0
- package/dist/types/modes/components/custom-editor.d.ts +6 -0
- package/dist/types/modes/components/customization/customization-dashboard.d.ts +1 -0
- package/dist/types/modes/components/extensions/state-manager.d.ts +4 -3
- package/dist/types/modes/controllers/input-controller.d.ts +9 -0
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/modes/utils/interrupt-ownership.d.ts +3 -0
- package/dist/types/modes/utils/keybinding-matchers.d.ts +1 -0
- package/dist/types/modes/utils/macos-option-forwarding.d.ts +17 -0
- package/dist/types/progress/collect-project-progress.d.ts +38 -0
- package/dist/types/progress/progress-contract.d.ts +154 -0
- package/dist/types/progress/progress-snapshot.d.ts +11 -0
- package/dist/types/progress/project-progress.d.ts +141 -0
- package/dist/types/progress/render-progress.d.ts +28 -0
- package/dist/types/runtime-mcp/elicitation.d.ts +12 -0
- package/dist/types/runtime-mcp/oauth-public-url.d.ts +1 -0
- package/dist/types/runtime-mcp/plugin-network-boundary.d.ts +1 -0
- package/dist/types/runtime-mcp/smithery-registry.d.ts +24 -0
- package/dist/types/runtime-mcp/types.d.ts +6 -0
- package/dist/types/sdk/acp/adapter.d.ts +1 -1
- package/dist/types/sdk/broker/broker-exit.d.ts +6 -2
- package/dist/types/sdk/broker/broker.d.ts +18 -1
- package/dist/types/sdk/broker/lifecycle.d.ts +9 -0
- package/dist/types/sdk/broker/session-index.d.ts +12 -6
- package/dist/types/sdk/broker/task-artifact-owner-validation.d.ts +55 -0
- package/dist/types/sdk/bus/index.d.ts +12 -1
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +6 -1
- package/dist/types/sdk/bus/telegram-daemon.d.ts +3 -2
- package/dist/types/sdk/client/client.d.ts +2 -0
- package/dist/types/sdk/host/host.d.ts +6 -0
- package/dist/types/sdk/host/query/handlers.d.ts +3 -0
- package/dist/types/sdk/index.d.ts +1 -0
- package/dist/types/sdk/router/session-router.d.ts +9 -0
- package/dist/types/sdk/session-list.d.ts +1 -1
- package/dist/types/sdk/session.d.ts +8 -0
- package/dist/types/session/agent-session.d.ts +38 -9
- package/dist/types/session/artifacts.d.ts +2 -2
- package/dist/types/session/internal/managed-gc-retirement-codec.d.ts +32 -0
- package/dist/types/session/internal/managed-session-scope.d.ts +79 -2
- package/dist/types/session/internal/managed-session-storage.d.ts +36 -1
- package/dist/types/session/internal/managed-task-owner-cleanup.d.ts +62 -0
- package/dist/types/session/internal/task-artifact-owner-access.d.ts +19 -0
- package/dist/types/session/internal/task-artifact-owner-transcript.d.ts +11 -0
- package/dist/types/session/session-manager.d.ts +31 -5
- package/dist/types/session/session-retirement.d.ts +71 -0
- package/dist/types/session/session-storage.d.ts +62 -48
- package/dist/types/session/session-transcript-header.d.ts +2 -0
- package/dist/types/session/task-artifact-owner-codec.d.ts +109 -0
- package/dist/types/session/task-artifact-owner-retirement.d.ts +7 -0
- package/dist/types/session/task-artifact-owner.d.ts +10 -0
- package/dist/types/setup/credential-auto-import.d.ts +1 -1
- package/dist/types/setup/credential-import.d.ts +6 -4
- package/dist/types/skill-state/active-state.d.ts +38 -0
- package/dist/types/slash-commands/helpers/progress-report.d.ts +8 -0
- package/dist/types/task/executor.d.ts +3 -0
- package/dist/types/tools/bash-skill-urls.d.ts +1 -1
- package/dist/types/tools/index.d.ts +3 -0
- package/dist/types/tools/python.d.ts +9 -1
- package/dist/types/tools/recipe/recipe-guard.d.ts +7 -0
- package/dist/types/tools/restricted-cwd.d.ts +1 -0
- package/dist/types/tools/todo-write.d.ts +6 -0
- package/dist/types/utils/tools-checksum.d.ts +7 -0
- package/package.json +7 -7
- package/scripts/generate-sdk-operation-inventory.ts +21 -0
- package/scripts/resident-memory-bench.ts +174 -20
- package/scripts/verify-managed-empty-stop.ts +28 -0
- package/src/async/job-manager.ts +228 -122
- package/src/capability/index.ts +18 -0
- package/src/capability/mcp.ts +2 -0
- package/src/capability/skill.ts +2 -0
- package/src/capability/types.ts +6 -0
- package/src/cli/auth-broker-cli.ts +1 -1
- package/src/cli/config-cli.ts +8 -18
- package/src/cli/customize-doctor.ts +15 -2
- package/src/cli/public-command-errors.ts +21 -1
- package/src/cli/setup-cli.ts +4 -4
- package/src/cli/skills-cli.ts +5 -0
- package/src/cli-main.ts +7 -8
- package/src/commands/deep-interview.ts +47 -8
- package/src/commands/sdk.ts +140 -29
- package/src/config/autorouting-tier-map.ts +117 -7
- package/src/config/file-lock.ts +307 -68
- package/src/config/mcp-schema.json +4 -0
- package/src/config/model-bindings-applier.ts +20 -0
- package/src/config/model-profile-activation.ts +240 -46
- package/src/config/model-registry.ts +47 -153
- package/src/config/settings.ts +44 -4
- package/src/config/skill-settings-defaults.ts +7 -0
- package/src/coordinator-mcp/policy.ts +3 -2
- package/src/cursor-delete-path.ts +10 -0
- package/src/cursor-mcp-name.ts +15 -0
- package/src/cursor.ts +13 -2
- package/src/customization/inventory.ts +3 -0
- package/src/debug/report-bundle-parent.ts +22 -0
- package/src/debug/report-bundle.ts +3 -0
- package/src/debug/system-info.ts +13 -1
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.ts +67 -4
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.ts +80 -0
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +105 -10
- package/src/defaults/gjc/skills/ralplan/SKILL.md +6 -4
- package/src/defaults/gjc-defaults.test.ts +18 -1
- package/src/defaults/gjc-defaults.ts +3 -0
- package/src/defaults/gjc-skills.generated.ts +58 -36
- package/src/discovery/agents.ts +6 -1
- package/src/discovery/builtin.ts +10 -0
- package/src/discovery/helpers.ts +168 -23
- package/src/discovery/mcp-json.ts +6 -0
- package/src/discovery/ssh.ts +9 -4
- package/src/discovery/substitute-plugin-root.ts +3 -1
- package/src/edit/file-read-cache.ts +1 -1
- package/src/eval/py/executor.ts +380 -120
- package/src/export/html/css-color.ts +9 -0
- package/src/export/html/index.ts +5 -4
- package/src/export/html/template.generated.ts +1 -1
- package/src/extensibility/extensions/runner.ts +4 -0
- package/src/extensibility/extensions/types.ts +7 -0
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +73 -8
- package/src/extensibility/plugins/manager.ts +3 -2
- package/src/extensibility/plugins/marketplace/cache.ts +15 -0
- package/src/extensibility/plugins/marketplace/manager.ts +11 -3
- package/src/extensibility/plugins/plugin-link-path.ts +12 -0
- package/src/extensibility/runtime-skill-discovery.ts +20 -2
- package/src/extensibility/skill-management.ts +6 -2
- package/src/extensibility/skills.ts +6 -1
- package/src/gjc-runtime/deep-interview-crystallize.ts +1814 -0
- package/src/gjc-runtime/deep-interview-recorder.ts +20 -2
- package/src/gjc-runtime/deep-interview-runtime.ts +1415 -13
- package/src/gjc-runtime/deep-interview-stage.ts +98 -21
- package/src/gjc-runtime/gc-runtime.ts +206 -8
- package/src/gjc-runtime/launch-worktree.ts +14 -4
- package/src/gjc-runtime/ralplan-runtime.ts +447 -52
- package/src/gjc-runtime/state-argv.ts +2 -0
- package/src/gjc-runtime/state-migrations.ts +91 -29
- package/src/gjc-runtime/state-runtime.ts +3716 -135
- package/src/gjc-runtime/state-writer.ts +83 -8
- package/src/gjc-runtime/ultragoal-runtime.ts +16 -4
- package/src/gjc-runtime/workflow-manifest.generated.json +70 -42
- package/src/gjc-runtime/workflow-manifest.ts +54 -21
- package/src/harness-control-plane/operate.ts +12 -4
- package/src/harness-control-plane/owner.ts +5 -1
- package/src/hashline/parser.ts +48 -9
- package/src/hashline/recovery.ts +13 -4
- package/src/hindsight/config.ts +9 -3
- package/src/internal-urls/docs-index.generated.ts +19 -18
- package/src/internal-urls/skill-path.ts +19 -0
- package/src/internal-urls/skill-protocol.ts +2 -0
- package/src/lsp/edits.ts +6 -0
- package/src/lsp/workspace-path.ts +51 -0
- package/src/main.ts +195 -31
- package/src/modes/acp/acp-agent.ts +163 -7
- package/src/modes/components/custom-editor.ts +14 -0
- package/src/modes/components/customization/customization-dashboard.ts +12 -0
- package/src/modes/components/extensions/extension-dashboard.ts +2 -2
- package/src/modes/components/extensions/state-manager.ts +15 -5
- package/src/modes/components/model-selector.ts +1 -4
- package/src/modes/components/provider-onboarding-selector.ts +1 -1
- package/src/modes/components/status-line/segments.ts +4 -0
- package/src/modes/controllers/event-controller.ts +11 -4
- package/src/modes/controllers/input-controller.ts +74 -29
- package/src/modes/controllers/runtime-mcp-command-controller.ts +8 -3
- package/src/modes/controllers/selector-controller.ts +28 -15
- package/src/modes/interactive-mode.ts +4 -0
- package/src/modes/runtime-init.ts +4 -0
- package/src/modes/utils/abort-message.ts +3 -1
- package/src/modes/utils/interrupt-ownership.ts +12 -0
- package/src/modes/utils/keybinding-matchers.ts +4 -0
- package/src/modes/utils/macos-option-forwarding.ts +80 -0
- package/src/progress/collect-project-progress.ts +153 -0
- package/src/progress/progress-contract.ts +172 -0
- package/src/progress/progress-snapshot.ts +140 -0
- package/src/progress/project-progress.ts +446 -0
- package/src/progress/render-progress.ts +209 -0
- package/src/prompts/system/master-mode.md +1 -0
- package/src/prompts/tools/skill-discovery.md +1 -1
- package/src/runtime-mcp/client.ts +13 -4
- package/src/runtime-mcp/config-writer.ts +10 -6
- package/src/runtime-mcp/config.ts +1 -0
- package/src/runtime-mcp/elicitation.ts +142 -0
- package/src/runtime-mcp/oauth-flow.ts +5 -0
- package/src/runtime-mcp/oauth-public-url.ts +8 -0
- package/src/runtime-mcp/plugin-network-boundary.ts +4 -0
- package/src/runtime-mcp/smithery-registry.ts +22 -3
- package/src/runtime-mcp/transports/http.ts +2 -2
- package/src/runtime-mcp/types.ts +6 -0
- package/src/sdk/acp/adapter.ts +93 -8
- package/src/sdk/broker/broker-exit.ts +52 -23
- package/src/sdk/broker/broker.ts +83 -7
- package/src/sdk/broker/ensure.ts +2 -0
- package/src/sdk/broker/lifecycle.ts +820 -73
- package/src/sdk/broker/session-index.ts +191 -81
- package/src/sdk/broker/task-artifact-owner-validation.ts +259 -0
- package/src/sdk/bus/chat-daemon-cli.ts +38 -1
- package/src/sdk/bus/chat-daemon-control.ts +2 -2
- package/src/sdk/bus/chat-daemon-runtime.ts +3 -0
- package/src/sdk/bus/index.ts +241 -46
- package/src/sdk/bus/telegram-daemon-contract.ts +6 -1
- package/src/sdk/bus/telegram-daemon.ts +4 -2
- package/src/sdk/cli/session-cli.ts +17 -3
- package/src/sdk/client/client.ts +28 -8
- package/src/sdk/host/host.ts +6 -0
- package/src/sdk/host/query/handlers.ts +9 -1
- package/src/sdk/host/session-runtime.test.ts +2805 -411
- package/src/sdk/host/session-runtime.ts +428 -111
- package/src/sdk/host/surface-policy.ts +1 -0
- package/src/sdk/index.ts +8 -0
- package/src/sdk/lifecycle-session.ts +3 -1
- package/src/sdk/mcp/server.ts +15 -3
- package/src/sdk/prompt-deadline-manager.ts +15 -0
- package/src/sdk/protocol/operation-inventory.generated.json +146 -0
- package/src/sdk/protocol/operation-registry.ts +9 -2
- package/src/sdk/router/session-router.ts +94 -14
- package/src/sdk/session-list.ts +1 -0
- package/src/sdk/session.ts +81 -38
- package/src/session/agent-session.ts +674 -224
- package/src/session/artifacts.ts +174 -70
- package/src/session/internal/managed-gc-retirement-codec.ts +319 -0
- package/src/session/internal/managed-session-scope.ts +3457 -462
- package/src/session/internal/managed-session-storage.ts +482 -61
- package/src/session/internal/managed-task-owner-cleanup.ts +473 -0
- package/src/session/internal/task-artifact-owner-access.ts +245 -0
- package/src/session/internal/task-artifact-owner-transcript.ts +614 -0
- package/src/session/session-manager.ts +939 -133
- package/src/session/session-retirement.ts +714 -0
- package/src/session/session-storage.ts +418 -174
- package/src/session/session-transcript-header.ts +17 -0
- package/src/session/task-artifact-owner-codec.ts +641 -0
- package/src/session/task-artifact-owner-retirement.ts +477 -0
- package/src/session/task-artifact-owner.ts +289 -0
- package/src/setup/credential-auto-import.ts +12 -3
- package/src/setup/credential-import.ts +176 -5
- package/src/setup/paseo/announce.ts +6 -1
- package/src/skill-state/active-state.ts +132 -2
- package/src/slash-commands/builtin-registry.ts +39 -9
- package/src/slash-commands/helpers/progress-report.ts +23 -0
- package/src/stt/setup.ts +3 -5
- package/src/task/commands.ts +3 -1
- package/src/task/executor.ts +4 -0
- package/src/task/index.ts +6 -0
- package/src/tools/ask.ts +205 -6
- package/src/tools/ast-edit.ts +4 -0
- package/src/tools/bash-allowed-prefixes.ts +15 -0
- package/src/tools/bash-skill-urls.ts +56 -3
- package/src/tools/bash.ts +48 -79
- package/src/tools/descriptors.ts +5 -1
- package/src/tools/eval.ts +56 -36
- package/src/tools/image-gen.ts +1 -1
- package/src/tools/index.ts +3 -0
- package/src/tools/python.ts +187 -66
- package/src/tools/recipe/index.ts +9 -0
- package/src/tools/recipe/recipe-guard.ts +19 -0
- package/src/tools/restricted-cwd.ts +10 -0
- package/src/tools/skill-discovery.ts +5 -0
- package/src/tools/skill.ts +28 -1
- package/src/tools/todo-write.ts +10 -1
- package/src/tools/tool-catalog.generated.ts +1 -1
- package/src/tools/write.ts +1 -0
- package/src/utils/tools-checksum.ts +34 -0
- package/src/utils/tools-manager.ts +24 -6
- package/src/web/search/providers/codex.ts +3 -2
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire contract of the `session.progress` (Q32) snapshot, `gjc.project_progress.v1`.
|
|
3
|
+
*
|
|
4
|
+
* This module is a dependency leaf on purpose: the production ACP agent renders
|
|
5
|
+
* `/progress` from this contract and must not reach the in-process session
|
|
6
|
+
* graph (enforced by `scripts/verify-gjc-sdk-canonicalization.ts`, which also
|
|
7
|
+
* follows type-only imports). Status unions are restated here; the projection
|
|
8
|
+
* in `progress-snapshot.ts` assigns the runtime statuses to them, so a new
|
|
9
|
+
* runtime status that the contract lacks fails type checking.
|
|
10
|
+
*/
|
|
11
|
+
import { sanitizeDisplayLine } from "@gajae-code/utils";
|
|
12
|
+
|
|
13
|
+
/** Ultragoal story status (`UltragoalGoalStatus`). */
|
|
14
|
+
export type ProgressStoryStatus =
|
|
15
|
+
| "pending"
|
|
16
|
+
| "active"
|
|
17
|
+
| "complete"
|
|
18
|
+
| "failed"
|
|
19
|
+
| "blocked"
|
|
20
|
+
| "review_blocked"
|
|
21
|
+
| "superseded";
|
|
22
|
+
/** Session goal status (`GoalStatus`). */
|
|
23
|
+
export type ProgressGoalStatus = "active" | "paused" | "complete" | "dropped";
|
|
24
|
+
/** Todo item status (`TodoStatus`). */
|
|
25
|
+
export type ProgressTodoStatus = "pending" | "in_progress" | "completed" | "abandoned";
|
|
26
|
+
/** Workflow HUD chip severity (`WorkflowHudSeverity`). */
|
|
27
|
+
export type ProgressChipSeverity = "info" | "warning" | "blocked" | "error" | "success";
|
|
28
|
+
|
|
29
|
+
/** Durable `.gjc` session-state sources that can fail to read. */
|
|
30
|
+
export type ProgressDurableSource = "workflow-state" | "ultragoal-plan";
|
|
31
|
+
|
|
32
|
+
export type ProgressBasisKind = "ultragoal-stories" | "todos" | "goal-status" | "none";
|
|
33
|
+
|
|
34
|
+
export type ProgressHeadline =
|
|
35
|
+
| "complete"
|
|
36
|
+
| "awaiting-completion"
|
|
37
|
+
| "blocked"
|
|
38
|
+
| "in-progress"
|
|
39
|
+
| "not-started"
|
|
40
|
+
| "paused"
|
|
41
|
+
| "dropped"
|
|
42
|
+
| "no-tracked-work";
|
|
43
|
+
|
|
44
|
+
export type ProgressSignalKind = "blocker" | "pending" | "note";
|
|
45
|
+
|
|
46
|
+
export type ProgressSignalSource = "ultragoal" | "workflow" | "subagents" | "todos" | "goal" | "state";
|
|
47
|
+
|
|
48
|
+
export interface ProgressAgentCounts {
|
|
49
|
+
total: number;
|
|
50
|
+
running: number;
|
|
51
|
+
/** Subagents that are queued or paused. */
|
|
52
|
+
waiting: number;
|
|
53
|
+
completed: number;
|
|
54
|
+
failed: number;
|
|
55
|
+
cancelled: number;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface ProgressReviewVerdict {
|
|
59
|
+
skill: string;
|
|
60
|
+
verdict: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export const PROJECT_PROGRESS_SNAPSHOT_SCHEMA = "gjc.project_progress.v1";
|
|
64
|
+
|
|
65
|
+
/** Bounds keep one snapshot well under a single SDK query page. */
|
|
66
|
+
export const PROGRESS_SNAPSHOT_LIMITS = { stories: 100, todos: 100, workflows: 16, attention: 50, text: 300 } as const;
|
|
67
|
+
|
|
68
|
+
export interface ProgressSnapshotStory {
|
|
69
|
+
id: string;
|
|
70
|
+
title: string;
|
|
71
|
+
status: ProgressStoryStatus;
|
|
72
|
+
/** A completion-verification (quality-gate) receipt is recorded on the story. */
|
|
73
|
+
verificationReceipt: boolean;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface ProgressSnapshotTodo {
|
|
77
|
+
content: string;
|
|
78
|
+
status: ProgressTodoStatus;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface ProgressSnapshotWorkflow {
|
|
82
|
+
skill: string;
|
|
83
|
+
phase: string;
|
|
84
|
+
summary: string | null;
|
|
85
|
+
chips: { label: string; value: string | null; severity: ProgressChipSeverity | null }[];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface ProgressSnapshotAttention {
|
|
89
|
+
kind: ProgressSignalKind;
|
|
90
|
+
source: ProgressSignalSource;
|
|
91
|
+
ref: string | null;
|
|
92
|
+
text: string;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface ProjectProgressSnapshot {
|
|
96
|
+
schema: typeof PROJECT_PROGRESS_SNAPSHOT_SCHEMA;
|
|
97
|
+
/** Overall completion state; identical to the `/progress` headline. */
|
|
98
|
+
state: ProgressHeadline;
|
|
99
|
+
completion: {
|
|
100
|
+
/** Which countable units the indicator was derived from; `none` means nothing is countable. */
|
|
101
|
+
basis: ProgressBasisKind;
|
|
102
|
+
done: number;
|
|
103
|
+
total: number;
|
|
104
|
+
/** Whole percent; `null` when `basis` is `none`. Never 100 while a unit is open. */
|
|
105
|
+
percent: number | null;
|
|
106
|
+
/** Every counted unit is done (the session may still be awaiting goal completion or subagents). */
|
|
107
|
+
allUnitsDone: boolean;
|
|
108
|
+
/** `state === "complete"`: units done, goal (if any) complete, no subagents running, queued, or paused. */
|
|
109
|
+
complete: boolean;
|
|
110
|
+
explanation: string;
|
|
111
|
+
};
|
|
112
|
+
execution: {
|
|
113
|
+
goal: { objective: string; status: ProgressGoalStatus; timeUsedSeconds: number } | null;
|
|
114
|
+
ultragoal: {
|
|
115
|
+
objective: string;
|
|
116
|
+
counts: {
|
|
117
|
+
total: number;
|
|
118
|
+
complete: number;
|
|
119
|
+
active: number;
|
|
120
|
+
pending: number;
|
|
121
|
+
blocked: number;
|
|
122
|
+
superseded: number;
|
|
123
|
+
};
|
|
124
|
+
stories: ProgressSnapshotStory[];
|
|
125
|
+
omittedStories: number;
|
|
126
|
+
} | null;
|
|
127
|
+
todos: {
|
|
128
|
+
counts: { total: number; completed: number; inProgress: number; pending: number; abandoned: number };
|
|
129
|
+
items: ProgressSnapshotTodo[];
|
|
130
|
+
omittedItems: number;
|
|
131
|
+
} | null;
|
|
132
|
+
};
|
|
133
|
+
activeWork: {
|
|
134
|
+
/**
|
|
135
|
+
* Active story, else the next pending one, matching the Ultragoal scheduler.
|
|
136
|
+
* Blocked, review-blocked, and failed stories are never reported here (failed
|
|
137
|
+
* stories are retried only on explicit request); `null` when nothing is schedulable.
|
|
138
|
+
*/
|
|
139
|
+
story: { id: string; title: string } | null;
|
|
140
|
+
/** In-progress todo, else the next pending one. */
|
|
141
|
+
todo: string | null;
|
|
142
|
+
workflows: ProgressSnapshotWorkflow[];
|
|
143
|
+
/** Active workflows beyond `PROGRESS_SNAPSHOT_LIMITS.workflows` that `workflows` leaves out. */
|
|
144
|
+
omittedWorkflows: number;
|
|
145
|
+
agents: ProgressAgentCounts;
|
|
146
|
+
};
|
|
147
|
+
verification: {
|
|
148
|
+
/** Present only when at least one story is complete. */
|
|
149
|
+
storyReceipts: { complete: number; withReceipt: number; withoutReceipt: number } | null;
|
|
150
|
+
reviewVerdicts: ProgressReviewVerdict[];
|
|
151
|
+
};
|
|
152
|
+
attention: ProgressSnapshotAttention[];
|
|
153
|
+
omittedAttention: number;
|
|
154
|
+
sources: {
|
|
155
|
+
/** Session-scoped `.gjc` state (workflows, ultragoal plan) was consulted. */
|
|
156
|
+
sessionStateRead: boolean;
|
|
157
|
+
/** Sources that exist but could not be read; excluded from every count. */
|
|
158
|
+
unreadable: ProgressDurableSource[];
|
|
159
|
+
/** Sources whose primary record was unreadable but whose contents were recovered from authoritative per-entry records. */
|
|
160
|
+
recovered: ProgressDurableSource[];
|
|
161
|
+
/** Sources whose readable derived snapshot listed entries the authoritative per-entry records do not; those stale entries were discarded. */
|
|
162
|
+
discarded: ProgressDurableSource[];
|
|
163
|
+
/** Sources listing entries whose authority could not be established; those entries are excluded and their absence is unconfirmed. */
|
|
164
|
+
unresolved: ProgressDurableSource[];
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Strip terminal escapes/control characters and bound length; durable text is untrusted. */
|
|
169
|
+
export function boundSnapshotText(text: string, max: number = PROGRESS_SNAPSHOT_LIMITS.text): string {
|
|
170
|
+
const clean = sanitizeDisplayLine(text).replace(/\s+/g, " ").trim();
|
|
171
|
+
return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;
|
|
172
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Machine-facing projection of the project progress report (SDK query
|
|
3
|
+
* `session.progress`, Q32). It is a pure re-shaping of `ProjectProgressReport`:
|
|
4
|
+
* every number, state, and attention item comes from the same computation, and
|
|
5
|
+
* the human `/progress` view renders this snapshot (`render-progress.ts`), so
|
|
6
|
+
* the two can never disagree. Absent evidence is `null`/empty, never estimated.
|
|
7
|
+
* Every bounded list reports how many entries it omitted.
|
|
8
|
+
*/
|
|
9
|
+
import {
|
|
10
|
+
boundSnapshotText,
|
|
11
|
+
PROGRESS_SNAPSHOT_LIMITS,
|
|
12
|
+
PROJECT_PROGRESS_SNAPSHOT_SCHEMA,
|
|
13
|
+
type ProjectProgressSnapshot,
|
|
14
|
+
} from "./progress-contract";
|
|
15
|
+
import type { ProjectProgressReport } from "./project-progress";
|
|
16
|
+
|
|
17
|
+
function bounded<T, U>(items: readonly T[], limit: number, map: (item: T) => U): { kept: U[]; omitted: number } {
|
|
18
|
+
return { kept: items.slice(0, limit).map(map), omitted: Math.max(0, items.length - limit) };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function toProjectProgressSnapshot(report: ProjectProgressReport): ProjectProgressSnapshot {
|
|
22
|
+
const { completion } = report;
|
|
23
|
+
const stories = report.stories;
|
|
24
|
+
const ultragoal =
|
|
25
|
+
report.ultragoal && stories
|
|
26
|
+
? (() => {
|
|
27
|
+
const { kept, omitted } = bounded(report.ultragoal.stories, PROGRESS_SNAPSHOT_LIMITS.stories, story => ({
|
|
28
|
+
id: boundSnapshotText(story.id, 64),
|
|
29
|
+
title: boundSnapshotText(story.title),
|
|
30
|
+
status: story.status,
|
|
31
|
+
verificationReceipt: story.hasVerificationReceipt,
|
|
32
|
+
}));
|
|
33
|
+
return {
|
|
34
|
+
objective: boundSnapshotText(report.ultragoal.objective),
|
|
35
|
+
counts: {
|
|
36
|
+
total: stories.total,
|
|
37
|
+
complete: stories.complete,
|
|
38
|
+
active: stories.active,
|
|
39
|
+
pending: stories.pending,
|
|
40
|
+
blocked: stories.blocked,
|
|
41
|
+
superseded: stories.superseded,
|
|
42
|
+
},
|
|
43
|
+
stories: kept,
|
|
44
|
+
omittedStories: omitted,
|
|
45
|
+
};
|
|
46
|
+
})()
|
|
47
|
+
: null;
|
|
48
|
+
const todos = report.todos
|
|
49
|
+
? (() => {
|
|
50
|
+
const { kept, omitted } = bounded(report.todoItems, PROGRESS_SNAPSHOT_LIMITS.todos, todo => ({
|
|
51
|
+
content: boundSnapshotText(todo.content),
|
|
52
|
+
status: todo.status,
|
|
53
|
+
}));
|
|
54
|
+
const t = report.todos;
|
|
55
|
+
return {
|
|
56
|
+
counts: {
|
|
57
|
+
total: t.total,
|
|
58
|
+
completed: t.completed,
|
|
59
|
+
inProgress: t.inProgress,
|
|
60
|
+
pending: t.pending,
|
|
61
|
+
abandoned: t.abandoned,
|
|
62
|
+
},
|
|
63
|
+
items: kept,
|
|
64
|
+
omittedItems: omitted,
|
|
65
|
+
};
|
|
66
|
+
})()
|
|
67
|
+
: null;
|
|
68
|
+
const workflows = bounded(report.workflows, PROGRESS_SNAPSHOT_LIMITS.workflows, workflow => ({
|
|
69
|
+
skill: boundSnapshotText(workflow.skill, 64),
|
|
70
|
+
phase: boundSnapshotText(workflow.phase, 64),
|
|
71
|
+
summary: workflow.summary ? boundSnapshotText(workflow.summary) : null,
|
|
72
|
+
chips: workflow.chips.map(chip => ({
|
|
73
|
+
label: boundSnapshotText(chip.label, 64),
|
|
74
|
+
value: chip.value ? boundSnapshotText(chip.value) : null,
|
|
75
|
+
severity: chip.severity ?? null,
|
|
76
|
+
})),
|
|
77
|
+
}));
|
|
78
|
+
const attention = bounded(report.signals, PROGRESS_SNAPSHOT_LIMITS.attention, signal => ({
|
|
79
|
+
kind: signal.kind,
|
|
80
|
+
source: signal.source,
|
|
81
|
+
ref: signal.ref === undefined ? null : boundSnapshotText(signal.ref, 64),
|
|
82
|
+
text: boundSnapshotText(signal.text),
|
|
83
|
+
}));
|
|
84
|
+
const receipts = report.verification.storyReceipts;
|
|
85
|
+
return {
|
|
86
|
+
schema: PROJECT_PROGRESS_SNAPSHOT_SCHEMA,
|
|
87
|
+
state: report.headline,
|
|
88
|
+
completion: {
|
|
89
|
+
basis: completion.basis,
|
|
90
|
+
done: completion.done,
|
|
91
|
+
total: completion.total,
|
|
92
|
+
percent: completion.percent ?? null,
|
|
93
|
+
allUnitsDone: completion.total > 0 && completion.done >= completion.total,
|
|
94
|
+
complete: report.headline === "complete",
|
|
95
|
+
explanation: report.basisExplanation,
|
|
96
|
+
},
|
|
97
|
+
execution: {
|
|
98
|
+
goal: report.goal
|
|
99
|
+
? {
|
|
100
|
+
objective: boundSnapshotText(report.goal.objective),
|
|
101
|
+
status: report.goal.status,
|
|
102
|
+
timeUsedSeconds: report.goal.timeUsedSeconds,
|
|
103
|
+
}
|
|
104
|
+
: null,
|
|
105
|
+
ultragoal,
|
|
106
|
+
todos,
|
|
107
|
+
},
|
|
108
|
+
activeWork: {
|
|
109
|
+
story: stories?.current
|
|
110
|
+
? { id: boundSnapshotText(stories.current.id, 64), title: boundSnapshotText(stories.current.title) }
|
|
111
|
+
: null,
|
|
112
|
+
todo: report.todos?.current ? boundSnapshotText(report.todos.current) : null,
|
|
113
|
+
workflows: workflows.kept,
|
|
114
|
+
omittedWorkflows: workflows.omitted,
|
|
115
|
+
agents: { ...report.agents },
|
|
116
|
+
},
|
|
117
|
+
verification: {
|
|
118
|
+
storyReceipts: receipts
|
|
119
|
+
? {
|
|
120
|
+
complete: receipts.complete,
|
|
121
|
+
withReceipt: receipts.withReceipt,
|
|
122
|
+
withoutReceipt: receipts.complete - receipts.withReceipt,
|
|
123
|
+
}
|
|
124
|
+
: null,
|
|
125
|
+
reviewVerdicts: report.verification.reviewVerdicts.map(({ skill, verdict }) => ({
|
|
126
|
+
skill: boundSnapshotText(skill, 64),
|
|
127
|
+
verdict: boundSnapshotText(verdict, 64),
|
|
128
|
+
})),
|
|
129
|
+
},
|
|
130
|
+
attention: attention.kept,
|
|
131
|
+
omittedAttention: attention.omitted,
|
|
132
|
+
sources: {
|
|
133
|
+
sessionStateRead: report.sessionStateRead,
|
|
134
|
+
unreadable: [...report.unreadable],
|
|
135
|
+
recovered: [...report.recovered],
|
|
136
|
+
discarded: [...report.discarded],
|
|
137
|
+
unresolved: [...report.unresolved],
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|