pm-orchestrator-runner 1.0.6 → 1.0.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/README.md +20 -10
- package/dist/cli/index.js +36 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +19 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/namespace.d.ts +86 -0
- package/dist/config/namespace.d.ts.map +1 -0
- package/dist/config/namespace.js +150 -0
- package/dist/config/namespace.js.map +1 -0
- package/dist/core/runner-core.d.ts +19 -0
- package/dist/core/runner-core.d.ts.map +1 -1
- package/dist/core/runner-core.js +67 -4
- package/dist/core/runner-core.js.map +1 -1
- package/dist/executor/claude-code-executor.d.ts +28 -0
- package/dist/executor/claude-code-executor.d.ts.map +1 -1
- package/dist/executor/claude-code-executor.js +184 -1
- package/dist/executor/claude-code-executor.js.map +1 -1
- package/dist/executor/deterministic-executor.d.ts +2 -1
- package/dist/executor/deterministic-executor.d.ts.map +1 -1
- package/dist/executor/deterministic-executor.js +7 -0
- package/dist/executor/deterministic-executor.js.map +1 -1
- package/dist/executor/recovery-executor.d.ts +2 -1
- package/dist/executor/recovery-executor.d.ts.map +1 -1
- package/dist/executor/recovery-executor.js +7 -0
- package/dist/executor/recovery-executor.js.map +1 -1
- package/dist/logging/task-log-manager.d.ts +17 -2
- package/dist/logging/task-log-manager.d.ts.map +1 -1
- package/dist/logging/task-log-manager.js +153 -63
- package/dist/logging/task-log-manager.js.map +1 -1
- package/dist/models/enums.d.ts +54 -0
- package/dist/models/enums.d.ts.map +1 -1
- package/dist/models/enums.js +59 -1
- package/dist/models/enums.js.map +1 -1
- package/dist/models/index.d.ts +4 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +50 -2
- package/dist/models/index.js.map +1 -1
- package/dist/models/repl/task-log.d.ts +9 -0
- package/dist/models/repl/task-log.d.ts.map +1 -1
- package/dist/models/repl/task-log.js.map +1 -1
- package/dist/models/run.d.ts +82 -0
- package/dist/models/run.d.ts.map +1 -0
- package/dist/models/run.js +161 -0
- package/dist/models/run.js.map +1 -0
- package/dist/models/task-group.d.ts +164 -0
- package/dist/models/task-group.d.ts.map +1 -0
- package/dist/models/task-group.js +246 -0
- package/dist/models/task-group.js.map +1 -0
- package/dist/models/task.d.ts +7 -0
- package/dist/models/task.d.ts.map +1 -1
- package/dist/models/task.js.map +1 -1
- package/dist/models/thread.d.ts +53 -0
- package/dist/models/thread.d.ts.map +1 -0
- package/dist/models/thread.js +92 -0
- package/dist/models/thread.js.map +1 -0
- package/dist/pool/agent-pool.d.ts.map +1 -1
- package/dist/pool/agent-pool.js +2 -3
- package/dist/pool/agent-pool.js.map +1 -1
- package/dist/prompt/index.d.ts +8 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/index.js +13 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/prompt-assembler.d.ts +145 -0
- package/dist/prompt/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt/prompt-assembler.js +242 -0
- package/dist/prompt/prompt-assembler.js.map +1 -0
- package/dist/queue/index.d.ts +41 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +42 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/queue-poller.d.ts +107 -0
- package/dist/queue/queue-poller.d.ts.map +1 -0
- package/dist/queue/queue-poller.js +181 -0
- package/dist/queue/queue-poller.js.map +1 -0
- package/dist/queue/queue-store.d.ts +163 -0
- package/dist/queue/queue-store.d.ts.map +1 -0
- package/dist/queue/queue-store.js +421 -0
- package/dist/queue/queue-store.js.map +1 -0
- package/dist/repl/commands/logs.d.ts +3 -1
- package/dist/repl/commands/logs.d.ts.map +1 -1
- package/dist/repl/commands/logs.js +23 -3
- package/dist/repl/commands/logs.js.map +1 -1
- package/dist/repl/index.d.ts +1 -0
- package/dist/repl/index.d.ts.map +1 -1
- package/dist/repl/index.js +3 -1
- package/dist/repl/index.js.map +1 -1
- package/dist/repl/repl-interface.d.ts +94 -6
- package/dist/repl/repl-interface.d.ts.map +1 -1
- package/dist/repl/repl-interface.js +350 -54
- package/dist/repl/repl-interface.js.map +1 -1
- package/dist/repl/two-pane-renderer.d.ts +148 -0
- package/dist/repl/two-pane-renderer.d.ts.map +1 -0
- package/dist/repl/two-pane-renderer.js +239 -0
- package/dist/repl/two-pane-renderer.js.map +1 -0
- package/dist/web/index.d.ts +45 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +47 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/server.d.ts +71 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +329 -0
- package/dist/web/server.js.map +1 -0
- package/package.json +12 -3
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Run Model
|
|
4
|
+
* Per spec 05_DATA_MODELS.md L69-104
|
|
5
|
+
*
|
|
6
|
+
* Run は一連のタスク実行単位を表す。1つのスレッド内に複数の Run が存在できる。
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.generateRunId = generateRunId;
|
|
10
|
+
exports.resetRunCounter = resetRunCounter;
|
|
11
|
+
exports.createRun = createRun;
|
|
12
|
+
exports.completeRun = completeRun;
|
|
13
|
+
exports.failRun = failRun;
|
|
14
|
+
exports.cancelRun = cancelRun;
|
|
15
|
+
exports.validateRun = validateRun;
|
|
16
|
+
exports.isRunning = isRunning;
|
|
17
|
+
exports.isCompleted = isCompleted;
|
|
18
|
+
exports.isFailed = isFailed;
|
|
19
|
+
exports.isCancelled = isCancelled;
|
|
20
|
+
exports.isTerminal = isTerminal;
|
|
21
|
+
exports.getRunDuration = getRunDuration;
|
|
22
|
+
const enums_1 = require("./enums");
|
|
23
|
+
/**
|
|
24
|
+
* Run counter for generating unique IDs
|
|
25
|
+
*/
|
|
26
|
+
let runCounter = 0;
|
|
27
|
+
/**
|
|
28
|
+
* Generate a unique run ID
|
|
29
|
+
* Format: run_<連番>
|
|
30
|
+
*/
|
|
31
|
+
function generateRunId() {
|
|
32
|
+
runCounter++;
|
|
33
|
+
return `run_${runCounter}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Reset run counter (for testing)
|
|
37
|
+
*/
|
|
38
|
+
function resetRunCounter() {
|
|
39
|
+
runCounter = 0;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a new Run
|
|
43
|
+
*/
|
|
44
|
+
function createRun(threadId, sessionId, trigger) {
|
|
45
|
+
return {
|
|
46
|
+
run_id: generateRunId(),
|
|
47
|
+
thread_id: threadId,
|
|
48
|
+
session_id: sessionId,
|
|
49
|
+
started_at: new Date().toISOString(),
|
|
50
|
+
completed_at: null,
|
|
51
|
+
status: enums_1.RunStatus.RUNNING,
|
|
52
|
+
trigger,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Complete a Run successfully
|
|
57
|
+
*/
|
|
58
|
+
function completeRun(run) {
|
|
59
|
+
return {
|
|
60
|
+
...run,
|
|
61
|
+
completed_at: new Date().toISOString(),
|
|
62
|
+
status: enums_1.RunStatus.COMPLETED,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Fail a Run
|
|
67
|
+
*/
|
|
68
|
+
function failRun(run) {
|
|
69
|
+
return {
|
|
70
|
+
...run,
|
|
71
|
+
completed_at: new Date().toISOString(),
|
|
72
|
+
status: enums_1.RunStatus.FAILED,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Cancel a Run
|
|
77
|
+
*/
|
|
78
|
+
function cancelRun(run) {
|
|
79
|
+
return {
|
|
80
|
+
...run,
|
|
81
|
+
completed_at: new Date().toISOString(),
|
|
82
|
+
status: enums_1.RunStatus.CANCELLED,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validate a Run object
|
|
87
|
+
*/
|
|
88
|
+
function validateRun(run) {
|
|
89
|
+
if (typeof run !== 'object' || run === null) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const r = run;
|
|
93
|
+
// Required fields
|
|
94
|
+
if (typeof r.run_id !== 'string' || !r.run_id.startsWith('run_')) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
if (typeof r.thread_id !== 'string' || r.thread_id.length === 0) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
if (typeof r.session_id !== 'string' || r.session_id.length === 0) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
if (typeof r.started_at !== 'string') {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
if (r.completed_at !== null && typeof r.completed_at !== 'string') {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (!Object.values(enums_1.RunStatus).includes(r.status)) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
if (!Object.values(enums_1.RunTrigger).includes(r.trigger)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if a run is currently running
|
|
119
|
+
*/
|
|
120
|
+
function isRunning(run) {
|
|
121
|
+
return run.status === enums_1.RunStatus.RUNNING;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check if a run has completed (either successfully or with failure)
|
|
125
|
+
*/
|
|
126
|
+
function isCompleted(run) {
|
|
127
|
+
return run.status === enums_1.RunStatus.COMPLETED;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Check if a run has failed
|
|
131
|
+
*/
|
|
132
|
+
function isFailed(run) {
|
|
133
|
+
return run.status === enums_1.RunStatus.FAILED;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Check if a run was cancelled
|
|
137
|
+
*/
|
|
138
|
+
function isCancelled(run) {
|
|
139
|
+
return run.status === enums_1.RunStatus.CANCELLED;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if a run is in a terminal state (completed, failed, or cancelled)
|
|
143
|
+
*/
|
|
144
|
+
function isTerminal(run) {
|
|
145
|
+
return (run.status === enums_1.RunStatus.COMPLETED ||
|
|
146
|
+
run.status === enums_1.RunStatus.FAILED ||
|
|
147
|
+
run.status === enums_1.RunStatus.CANCELLED);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get duration of a run in milliseconds
|
|
151
|
+
* Returns null if run is still in progress
|
|
152
|
+
*/
|
|
153
|
+
function getRunDuration(run) {
|
|
154
|
+
if (run.completed_at === null) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
const start = new Date(run.started_at).getTime();
|
|
158
|
+
const end = new Date(run.completed_at).getTime();
|
|
159
|
+
return end - start;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/models/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Group Model
|
|
3
|
+
* Per spec 16_TASK_GROUP.md
|
|
4
|
+
*
|
|
5
|
+
* Task Group は「会話・思考・文脈の単位」である。
|
|
6
|
+
* 05_DATA_MODELS.md の Thread 概念を拡張し、
|
|
7
|
+
* 論理的な会話単位としての役割を明確化する。
|
|
8
|
+
*/
|
|
9
|
+
import { TaskGroupState } from './enums';
|
|
10
|
+
/**
|
|
11
|
+
* Conversation entry in task group history
|
|
12
|
+
* Represents a single input/output pair in the conversation
|
|
13
|
+
*/
|
|
14
|
+
export interface ConversationEntry {
|
|
15
|
+
/** Entry ID */
|
|
16
|
+
entry_id: string;
|
|
17
|
+
/** Role (user/assistant/system) */
|
|
18
|
+
role: 'user' | 'assistant' | 'system';
|
|
19
|
+
/** Content of the entry */
|
|
20
|
+
content: string;
|
|
21
|
+
/** Timestamp of the entry */
|
|
22
|
+
timestamp: string;
|
|
23
|
+
/** Associated task ID (if applicable) */
|
|
24
|
+
task_id?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* File change record
|
|
28
|
+
* Tracks changes made to files within a task group
|
|
29
|
+
*/
|
|
30
|
+
export interface FileChange {
|
|
31
|
+
/** Path to the file */
|
|
32
|
+
file_path: string;
|
|
33
|
+
/** Type of change */
|
|
34
|
+
change_type: 'created' | 'modified' | 'deleted';
|
|
35
|
+
/** Task that made the change */
|
|
36
|
+
task_id: string;
|
|
37
|
+
/** Timestamp of the change */
|
|
38
|
+
timestamp: string;
|
|
39
|
+
/** Previous content hash (for modified/deleted) */
|
|
40
|
+
previous_hash?: string;
|
|
41
|
+
/** New content hash (for created/modified) */
|
|
42
|
+
new_hash?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Task result for context maintenance
|
|
46
|
+
* Summarized result of a task execution
|
|
47
|
+
*/
|
|
48
|
+
export interface TaskResult {
|
|
49
|
+
/** Task ID */
|
|
50
|
+
task_id: string;
|
|
51
|
+
/** Final status */
|
|
52
|
+
status: string;
|
|
53
|
+
/** Summary of what was done */
|
|
54
|
+
summary: string;
|
|
55
|
+
/** Files that were modified */
|
|
56
|
+
files_modified: string[];
|
|
57
|
+
/** Error if any */
|
|
58
|
+
error?: string;
|
|
59
|
+
/** Completion timestamp */
|
|
60
|
+
completed_at: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Task Group Context
|
|
64
|
+
* Per spec 16_TASK_GROUP.md L100-106
|
|
65
|
+
*
|
|
66
|
+
* Contains all context information that persists within a task group.
|
|
67
|
+
*/
|
|
68
|
+
export interface TaskGroupContext {
|
|
69
|
+
/** Task Group ID (corresponds to thread_id for main thread) */
|
|
70
|
+
task_group_id: string;
|
|
71
|
+
/** Conversation history within this task group */
|
|
72
|
+
conversation_history: ConversationEntry[];
|
|
73
|
+
/** Files currently being worked on */
|
|
74
|
+
working_files: string[];
|
|
75
|
+
/** Result of the last completed task */
|
|
76
|
+
last_task_result: TaskResult | null;
|
|
77
|
+
/** All file changes accumulated in this task group */
|
|
78
|
+
accumulated_changes: FileChange[];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Task Group metadata
|
|
82
|
+
* Per spec 16_TASK_GROUP.md L36-42
|
|
83
|
+
*/
|
|
84
|
+
export interface TaskGroup {
|
|
85
|
+
/** Task Group ID (corresponds to thread_id) */
|
|
86
|
+
task_group_id: string;
|
|
87
|
+
/** Parent session ID */
|
|
88
|
+
session_id: string;
|
|
89
|
+
/** Creation timestamp */
|
|
90
|
+
created_at: string;
|
|
91
|
+
/** Human-readable description */
|
|
92
|
+
description?: string;
|
|
93
|
+
/** Current state */
|
|
94
|
+
state: TaskGroupState;
|
|
95
|
+
/** Context maintained within this group */
|
|
96
|
+
context: TaskGroupContext;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Generate a unique task group ID
|
|
100
|
+
* Format: tg_<連番>
|
|
101
|
+
*/
|
|
102
|
+
export declare function generateTaskGroupId(): string;
|
|
103
|
+
/**
|
|
104
|
+
* Reset task group counter (for testing)
|
|
105
|
+
*/
|
|
106
|
+
export declare function resetTaskGroupCounter(): void;
|
|
107
|
+
/**
|
|
108
|
+
* Generate a unique conversation entry ID
|
|
109
|
+
*/
|
|
110
|
+
export declare function generateConversationEntryId(): string;
|
|
111
|
+
/**
|
|
112
|
+
* Reset conversation entry counter (for testing)
|
|
113
|
+
*/
|
|
114
|
+
export declare function resetConversationEntryCounter(): void;
|
|
115
|
+
/**
|
|
116
|
+
* Create a new Task Group
|
|
117
|
+
*/
|
|
118
|
+
export declare function createTaskGroup(sessionId: string, description?: string): TaskGroup;
|
|
119
|
+
/**
|
|
120
|
+
* Activate a task group
|
|
121
|
+
* Per spec 16_TASK_GROUP.md L138: Created → Active: 最初のタスク投入時
|
|
122
|
+
*/
|
|
123
|
+
export declare function activateTaskGroup(taskGroup: TaskGroup): TaskGroup;
|
|
124
|
+
/**
|
|
125
|
+
* Pause a task group
|
|
126
|
+
* Per spec 16_TASK_GROUP.md L139: Active → Paused: ユーザーが一時停止
|
|
127
|
+
*/
|
|
128
|
+
export declare function pauseTaskGroup(taskGroup: TaskGroup): TaskGroup;
|
|
129
|
+
/**
|
|
130
|
+
* Resume a paused task group
|
|
131
|
+
* Per spec 16_TASK_GROUP.md L140: Paused → Active: ユーザーが再開
|
|
132
|
+
*/
|
|
133
|
+
export declare function resumeTaskGroup(taskGroup: TaskGroup): TaskGroup;
|
|
134
|
+
/**
|
|
135
|
+
* Complete a task group
|
|
136
|
+
* Per spec 16_TASK_GROUP.md L141-142: Active → Completed: ユーザーが明示的に終了
|
|
137
|
+
*/
|
|
138
|
+
export declare function completeTaskGroup(taskGroup: TaskGroup): TaskGroup;
|
|
139
|
+
/**
|
|
140
|
+
* Add a conversation entry to the task group
|
|
141
|
+
*/
|
|
142
|
+
export declare function addConversationEntry(taskGroup: TaskGroup, role: 'user' | 'assistant' | 'system', content: string, taskId?: string): TaskGroup;
|
|
143
|
+
/**
|
|
144
|
+
* Add a file change to the task group
|
|
145
|
+
*/
|
|
146
|
+
export declare function addFileChange(taskGroup: TaskGroup, filePath: string, changeType: 'created' | 'modified' | 'deleted', taskId: string, previousHash?: string, newHash?: string): TaskGroup;
|
|
147
|
+
/**
|
|
148
|
+
* Update the last task result
|
|
149
|
+
* Per spec 16_TASK_GROUP.md L113-116: Task 完了後の文脈更新
|
|
150
|
+
*/
|
|
151
|
+
export declare function updateLastTaskResult(taskGroup: TaskGroup, result: TaskResult): TaskGroup;
|
|
152
|
+
/**
|
|
153
|
+
* Validate a task group
|
|
154
|
+
*/
|
|
155
|
+
export declare function validateTaskGroup(taskGroup: unknown): taskGroup is TaskGroup;
|
|
156
|
+
/**
|
|
157
|
+
* Check if a task group is active
|
|
158
|
+
*/
|
|
159
|
+
export declare function isTaskGroupActive(taskGroup: TaskGroup): boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Check if a task group is completed (read-only)
|
|
162
|
+
*/
|
|
163
|
+
export declare function isTaskGroupCompleted(taskGroup: TaskGroup): boolean;
|
|
164
|
+
//# sourceMappingURL=task-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-group.d.ts","sourceRoot":"","sources":["../../src/models/task-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Task Group Model
|
|
4
|
+
* Per spec 16_TASK_GROUP.md
|
|
5
|
+
*
|
|
6
|
+
* Task Group は「会話・思考・文脈の単位」である。
|
|
7
|
+
* 05_DATA_MODELS.md の Thread 概念を拡張し、
|
|
8
|
+
* 論理的な会話単位としての役割を明確化する。
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.generateTaskGroupId = generateTaskGroupId;
|
|
12
|
+
exports.resetTaskGroupCounter = resetTaskGroupCounter;
|
|
13
|
+
exports.generateConversationEntryId = generateConversationEntryId;
|
|
14
|
+
exports.resetConversationEntryCounter = resetConversationEntryCounter;
|
|
15
|
+
exports.createTaskGroup = createTaskGroup;
|
|
16
|
+
exports.activateTaskGroup = activateTaskGroup;
|
|
17
|
+
exports.pauseTaskGroup = pauseTaskGroup;
|
|
18
|
+
exports.resumeTaskGroup = resumeTaskGroup;
|
|
19
|
+
exports.completeTaskGroup = completeTaskGroup;
|
|
20
|
+
exports.addConversationEntry = addConversationEntry;
|
|
21
|
+
exports.addFileChange = addFileChange;
|
|
22
|
+
exports.updateLastTaskResult = updateLastTaskResult;
|
|
23
|
+
exports.validateTaskGroup = validateTaskGroup;
|
|
24
|
+
exports.isTaskGroupActive = isTaskGroupActive;
|
|
25
|
+
exports.isTaskGroupCompleted = isTaskGroupCompleted;
|
|
26
|
+
const enums_1 = require("./enums");
|
|
27
|
+
/**
|
|
28
|
+
* Task group counter for generating unique IDs
|
|
29
|
+
*/
|
|
30
|
+
let taskGroupCounter = 0;
|
|
31
|
+
/**
|
|
32
|
+
* Generate a unique task group ID
|
|
33
|
+
* Format: tg_<連番>
|
|
34
|
+
*/
|
|
35
|
+
function generateTaskGroupId() {
|
|
36
|
+
taskGroupCounter++;
|
|
37
|
+
return `tg_${taskGroupCounter}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Reset task group counter (for testing)
|
|
41
|
+
*/
|
|
42
|
+
function resetTaskGroupCounter() {
|
|
43
|
+
taskGroupCounter = 0;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Conversation entry counter
|
|
47
|
+
*/
|
|
48
|
+
let conversationEntryCounter = 0;
|
|
49
|
+
/**
|
|
50
|
+
* Generate a unique conversation entry ID
|
|
51
|
+
*/
|
|
52
|
+
function generateConversationEntryId() {
|
|
53
|
+
conversationEntryCounter++;
|
|
54
|
+
return `ce_${conversationEntryCounter}`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Reset conversation entry counter (for testing)
|
|
58
|
+
*/
|
|
59
|
+
function resetConversationEntryCounter() {
|
|
60
|
+
conversationEntryCounter = 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Create a new Task Group
|
|
64
|
+
*/
|
|
65
|
+
function createTaskGroup(sessionId, description) {
|
|
66
|
+
const taskGroupId = generateTaskGroupId();
|
|
67
|
+
return {
|
|
68
|
+
task_group_id: taskGroupId,
|
|
69
|
+
session_id: sessionId,
|
|
70
|
+
created_at: new Date().toISOString(),
|
|
71
|
+
description,
|
|
72
|
+
state: enums_1.TaskGroupState.CREATED,
|
|
73
|
+
context: {
|
|
74
|
+
task_group_id: taskGroupId,
|
|
75
|
+
conversation_history: [],
|
|
76
|
+
working_files: [],
|
|
77
|
+
last_task_result: null,
|
|
78
|
+
accumulated_changes: [],
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Activate a task group
|
|
84
|
+
* Per spec 16_TASK_GROUP.md L138: Created → Active: 最初のタスク投入時
|
|
85
|
+
*/
|
|
86
|
+
function activateTaskGroup(taskGroup) {
|
|
87
|
+
if (taskGroup.state === enums_1.TaskGroupState.COMPLETED) {
|
|
88
|
+
throw new Error('Cannot activate a completed task group');
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
...taskGroup,
|
|
92
|
+
state: enums_1.TaskGroupState.ACTIVE,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Pause a task group
|
|
97
|
+
* Per spec 16_TASK_GROUP.md L139: Active → Paused: ユーザーが一時停止
|
|
98
|
+
*/
|
|
99
|
+
function pauseTaskGroup(taskGroup) {
|
|
100
|
+
if (taskGroup.state !== enums_1.TaskGroupState.ACTIVE) {
|
|
101
|
+
throw new Error('Can only pause an active task group');
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
...taskGroup,
|
|
105
|
+
state: enums_1.TaskGroupState.PAUSED,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Resume a paused task group
|
|
110
|
+
* Per spec 16_TASK_GROUP.md L140: Paused → Active: ユーザーが再開
|
|
111
|
+
*/
|
|
112
|
+
function resumeTaskGroup(taskGroup) {
|
|
113
|
+
if (taskGroup.state !== enums_1.TaskGroupState.PAUSED) {
|
|
114
|
+
throw new Error('Can only resume a paused task group');
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
...taskGroup,
|
|
118
|
+
state: enums_1.TaskGroupState.ACTIVE,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Complete a task group
|
|
123
|
+
* Per spec 16_TASK_GROUP.md L141-142: Active → Completed: ユーザーが明示的に終了
|
|
124
|
+
*/
|
|
125
|
+
function completeTaskGroup(taskGroup) {
|
|
126
|
+
if (taskGroup.state !== enums_1.TaskGroupState.ACTIVE) {
|
|
127
|
+
throw new Error('Can only complete an active task group');
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
...taskGroup,
|
|
131
|
+
state: enums_1.TaskGroupState.COMPLETED,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Add a conversation entry to the task group
|
|
136
|
+
*/
|
|
137
|
+
function addConversationEntry(taskGroup, role, content, taskId) {
|
|
138
|
+
const entry = {
|
|
139
|
+
entry_id: generateConversationEntryId(),
|
|
140
|
+
role,
|
|
141
|
+
content,
|
|
142
|
+
timestamp: new Date().toISOString(),
|
|
143
|
+
task_id: taskId,
|
|
144
|
+
};
|
|
145
|
+
return {
|
|
146
|
+
...taskGroup,
|
|
147
|
+
context: {
|
|
148
|
+
...taskGroup.context,
|
|
149
|
+
conversation_history: [...taskGroup.context.conversation_history, entry],
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Add a file change to the task group
|
|
155
|
+
*/
|
|
156
|
+
function addFileChange(taskGroup, filePath, changeType, taskId, previousHash, newHash) {
|
|
157
|
+
const change = {
|
|
158
|
+
file_path: filePath,
|
|
159
|
+
change_type: changeType,
|
|
160
|
+
task_id: taskId,
|
|
161
|
+
timestamp: new Date().toISOString(),
|
|
162
|
+
previous_hash: previousHash,
|
|
163
|
+
new_hash: newHash,
|
|
164
|
+
};
|
|
165
|
+
// Update working files
|
|
166
|
+
let workingFiles = [...taskGroup.context.working_files];
|
|
167
|
+
if (changeType === 'created' || changeType === 'modified') {
|
|
168
|
+
if (!workingFiles.includes(filePath)) {
|
|
169
|
+
workingFiles.push(filePath);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else if (changeType === 'deleted') {
|
|
173
|
+
workingFiles = workingFiles.filter((f) => f !== filePath);
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
...taskGroup,
|
|
177
|
+
context: {
|
|
178
|
+
...taskGroup.context,
|
|
179
|
+
working_files: workingFiles,
|
|
180
|
+
accumulated_changes: [...taskGroup.context.accumulated_changes, change],
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Update the last task result
|
|
186
|
+
* Per spec 16_TASK_GROUP.md L113-116: Task 完了後の文脈更新
|
|
187
|
+
*/
|
|
188
|
+
function updateLastTaskResult(taskGroup, result) {
|
|
189
|
+
return {
|
|
190
|
+
...taskGroup,
|
|
191
|
+
context: {
|
|
192
|
+
...taskGroup.context,
|
|
193
|
+
last_task_result: result,
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Validate a task group
|
|
199
|
+
*/
|
|
200
|
+
function validateTaskGroup(taskGroup) {
|
|
201
|
+
if (typeof taskGroup !== 'object' || taskGroup === null) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
const tg = taskGroup;
|
|
205
|
+
// Required fields
|
|
206
|
+
if (typeof tg.task_group_id !== 'string' || !tg.task_group_id.startsWith('tg_')) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
if (typeof tg.session_id !== 'string' || tg.session_id.length === 0) {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
if (typeof tg.created_at !== 'string') {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
if (!Object.values(enums_1.TaskGroupState).includes(tg.state)) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
// Context validation
|
|
219
|
+
if (typeof tg.context !== 'object' || tg.context === null) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
const ctx = tg.context;
|
|
223
|
+
if (!Array.isArray(ctx.conversation_history)) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
if (!Array.isArray(ctx.working_files)) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
if (!Array.isArray(ctx.accumulated_changes)) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Check if a task group is active
|
|
236
|
+
*/
|
|
237
|
+
function isTaskGroupActive(taskGroup) {
|
|
238
|
+
return taskGroup.state === enums_1.TaskGroupState.ACTIVE;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Check if a task group is completed (read-only)
|
|
242
|
+
*/
|
|
243
|
+
function isTaskGroupCompleted(taskGroup) {
|
|
244
|
+
return taskGroup.state === enums_1.TaskGroupState.COMPLETED;
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=task-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-group.js","sourceRoot":"","sources":["../../src/models/task-group.ts"],"names":[],"mappings":"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"}
|
package/dist/models/task.d.ts
CHANGED
|
@@ -13,9 +13,14 @@ export interface GranularityLimits {
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Task data structure
|
|
16
|
+
* Per spec 05_DATA_MODELS.md L108-142
|
|
16
17
|
*/
|
|
17
18
|
export interface Task {
|
|
18
19
|
task_id: string;
|
|
20
|
+
/** 所属スレッドの識別子 */
|
|
21
|
+
thread_id?: string;
|
|
22
|
+
/** 所属 Run の識別子 */
|
|
23
|
+
run_id?: string;
|
|
19
24
|
description: string;
|
|
20
25
|
requirements: string[];
|
|
21
26
|
status: TaskStatus;
|
|
@@ -30,6 +35,8 @@ export interface Task {
|
|
|
30
35
|
subtask_ids?: string[];
|
|
31
36
|
started_at?: string;
|
|
32
37
|
completed_at?: string;
|
|
38
|
+
/** 当該タスクに対応する TaskLog の識別子 */
|
|
39
|
+
log_ref?: string;
|
|
33
40
|
error?: {
|
|
34
41
|
code: string;
|
|
35
42
|
message: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oCAAoC,EAAE,OAAO,CAAC;IAC9C,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,gCAAgC,EAAE,OAAO,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAoBD;;GAEG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC7C,IAAI,CAgBN;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CA2DhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,CAMxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAMnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAKpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAK3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAKrD"}
|
package/dist/models/task.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"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"}
|