dorfl 0.1.2 → 0.2.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.
- package/dist/advance-drivers.d.ts +1 -1
- package/dist/advance-drivers.d.ts.map +1 -1
- package/dist/advance-drivers.js +15 -3
- package/dist/advance-drivers.js.map +1 -1
- package/dist/advance-lifecycle-template.d.ts.map +1 -1
- package/dist/advance-lifecycle-template.js +76 -4
- package/dist/advance-lifecycle-template.js.map +1 -1
- package/dist/advance-treeless-publish.d.ts +23 -0
- package/dist/advance-treeless-publish.d.ts.map +1 -1
- package/dist/advance-treeless-publish.js +41 -0
- package/dist/advance-treeless-publish.js.map +1 -1
- package/dist/advance.d.ts +59 -7
- package/dist/advance.d.ts.map +1 -1
- package/dist/advance.js +389 -82
- package/dist/advance.js.map +1 -1
- package/dist/advancing-lock.d.ts +30 -2
- package/dist/advancing-lock.d.ts.map +1 -1
- package/dist/advancing-lock.js +50 -0
- package/dist/advancing-lock.js.map +1 -1
- package/dist/agent-launch.d.ts +12 -0
- package/dist/agent-launch.d.ts.map +1 -1
- package/dist/agent-launch.js +22 -12
- package/dist/agent-launch.js.map +1 -1
- package/dist/agent-stop.d.ts +40 -2
- package/dist/agent-stop.d.ts.map +1 -1
- package/dist/agent-stop.js +30 -2
- package/dist/agent-stop.js.map +1 -1
- package/dist/apply-decide.d.ts +17 -3
- package/dist/apply-decide.d.ts.map +1 -1
- package/dist/apply-decide.js +36 -7
- package/dist/apply-decide.js.map +1 -1
- package/dist/apply-merge-action.d.ts +17 -5
- package/dist/apply-merge-action.d.ts.map +1 -1
- package/dist/apply-merge-action.js +43 -8
- package/dist/apply-merge-action.js.map +1 -1
- package/dist/apply-persist.d.ts +57 -26
- package/dist/apply-persist.d.ts.map +1 -1
- package/dist/apply-persist.js +166 -37
- package/dist/apply-persist.js.map +1 -1
- package/dist/apply-stuck-action.d.ts +151 -0
- package/dist/apply-stuck-action.d.ts.map +1 -0
- package/dist/apply-stuck-action.js +125 -0
- package/dist/apply-stuck-action.js.map +1 -0
- package/dist/brand.d.ts +12 -1
- package/dist/brand.d.ts.map +1 -1
- package/dist/brand.js +2 -1
- package/dist/brand.js.map +1 -1
- package/dist/cli-spinner.d.ts +1 -1
- package/dist/cli-spinner.js +1 -1
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +320 -63
- package/dist/cli.js.map +1 -1
- package/dist/close-job-template.js +1 -1
- package/dist/complete.d.ts +6 -3
- package/dist/complete.d.ts.map +1 -1
- package/dist/complete.js +91 -37
- package/dist/complete.js.map +1 -1
- package/dist/config.d.ts +55 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +56 -4
- package/dist/config.js.map +1 -1
- package/dist/continue-branch.d.ts.map +1 -1
- package/dist/continue-branch.js +22 -0
- package/dist/continue-branch.js.map +1 -1
- package/dist/decision-engine.d.ts +38 -10
- package/dist/decision-engine.d.ts.map +1 -1
- package/dist/decision-engine.js +10 -6
- package/dist/decision-engine.js.map +1 -1
- package/dist/do-autopick.d.ts.map +1 -1
- package/dist/do-autopick.js +11 -1
- package/dist/do-autopick.js.map +1 -1
- package/dist/do-config.d.ts +1 -1
- package/dist/do.d.ts +49 -56
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +419 -30
- package/dist/do.js.map +1 -1
- package/dist/env-config.d.ts.map +1 -1
- package/dist/env-config.js +12 -4
- package/dist/env-config.js.map +1 -1
- package/dist/failure-cause.d.ts +3 -2
- package/dist/failure-cause.d.ts.map +1 -1
- package/dist/failure-cause.js +28 -1
- package/dist/failure-cause.js.map +1 -1
- package/dist/format.d.ts +6 -6
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +10 -27
- package/dist/format.js.map +1 -1
- package/dist/frontmatter.d.ts +16 -4
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +27 -1
- package/dist/frontmatter.js.map +1 -1
- package/dist/gc.d.ts +65 -6
- package/dist/gc.d.ts.map +1 -1
- package/dist/gc.js +126 -9
- package/dist/gc.js.map +1 -1
- package/dist/github.d.ts +14 -0
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +73 -0
- package/dist/github.js.map +1 -1
- package/dist/harness.d.ts +25 -0
- package/dist/harness.d.ts.map +1 -1
- package/dist/harness.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/install-ci-branch-protection.d.ts +132 -38
- package/dist/install-ci-branch-protection.d.ts.map +1 -1
- package/dist/install-ci-branch-protection.js +190 -48
- package/dist/install-ci-branch-protection.js.map +1 -1
- package/dist/install-ci-core.d.ts +21 -1
- package/dist/install-ci-core.d.ts.map +1 -1
- package/dist/install-ci-core.js +10 -3
- package/dist/install-ci-core.js.map +1 -1
- package/dist/install-ci-github.d.ts +32 -0
- package/dist/install-ci-github.d.ts.map +1 -1
- package/dist/install-ci-github.js +73 -0
- package/dist/install-ci-github.js.map +1 -1
- package/dist/install-skills.d.ts +123 -0
- package/dist/install-skills.d.ts.map +1 -0
- package/dist/install-skills.js +100 -0
- package/dist/install-skills.js.map +1 -0
- package/dist/intake-trigger-template.js +1 -1
- package/dist/intake.d.ts +17 -4
- package/dist/intake.d.ts.map +1 -1
- package/dist/intake.js +23 -7
- package/dist/intake.js.map +1 -1
- package/dist/integration-core.d.ts +10 -7
- package/dist/integration-core.d.ts.map +1 -1
- package/dist/integration-core.js +174 -60
- package/dist/integration-core.js.map +1 -1
- package/dist/integrator.d.ts +1 -1
- package/dist/integrator.d.ts.map +1 -1
- package/dist/integrator.js +19 -3
- package/dist/integrator.js.map +1 -1
- package/dist/isolation.d.ts +2 -2
- package/dist/isolation.d.ts.map +1 -1
- package/dist/isolation.js +9 -0
- package/dist/isolation.js.map +1 -1
- package/dist/item-lock.d.ts +196 -129
- package/dist/item-lock.d.ts.map +1 -1
- package/dist/item-lock.js +329 -254
- package/dist/item-lock.js.map +1 -1
- package/dist/ledger-write.d.ts +31 -26
- package/dist/ledger-write.d.ts.map +1 -1
- package/dist/ledger-write.js +100 -122
- package/dist/ledger-write.js.map +1 -1
- package/dist/lifecycle-gather.d.ts +17 -0
- package/dist/lifecycle-gather.d.ts.map +1 -1
- package/dist/lifecycle-gather.js +7 -1
- package/dist/lifecycle-gather.js.map +1 -1
- package/dist/lifecycle-pools.d.ts +40 -3
- package/dist/lifecycle-pools.d.ts.map +1 -1
- package/dist/lifecycle-pools.js +26 -6
- package/dist/lifecycle-pools.js.map +1 -1
- package/dist/merge-question-surfacer.d.ts +15 -1
- package/dist/merge-question-surfacer.d.ts.map +1 -1
- package/dist/merge-question-surfacer.js +18 -3
- package/dist/merge-question-surfacer.js.map +1 -1
- package/dist/migrate-stuck-locks.d.ts +129 -0
- package/dist/migrate-stuck-locks.d.ts.map +1 -0
- package/dist/migrate-stuck-locks.js +355 -0
- package/dist/migrate-stuck-locks.js.map +1 -0
- package/dist/needs-attention.d.ts +293 -16
- package/dist/needs-attention.d.ts.map +1 -1
- package/dist/needs-attention.js +532 -57
- package/dist/needs-attention.js.map +1 -1
- package/dist/orphan-sidecar.d.ts +8 -4
- package/dist/orphan-sidecar.d.ts.map +1 -1
- package/dist/orphan-sidecar.js +35 -2
- package/dist/orphan-sidecar.js.map +1 -1
- package/dist/pi-harness.d.ts +16 -0
- package/dist/pi-harness.d.ts.map +1 -1
- package/dist/pi-harness.js +82 -2
- package/dist/pi-harness.js.map +1 -1
- package/dist/placement.d.ts +3 -3
- package/dist/placement.js +1 -1
- package/dist/prd-to-spec.d.ts.map +1 -1
- package/dist/prd-to-spec.js +9 -5
- package/dist/prd-to-spec.js.map +1 -1
- package/dist/protocol/CLAIM-PROTOCOL.md +17 -10
- package/dist/protocol/REVIEW-PROTOCOL.md +4 -1
- package/dist/protocol/SURFACE-PROTOCOL.md +16 -2
- package/dist/protocol/TASKING-PROTOCOL.md +3 -1
- package/dist/protocol/WORK-CONTRACT.md +22 -18
- package/dist/protocol/task-template.md +1 -1
- package/dist/reap-branches.d.ts +12 -9
- package/dist/reap-branches.d.ts.map +1 -1
- package/dist/reap-branches.js +25 -7
- package/dist/reap-branches.js.map +1 -1
- package/dist/recover-isolated.d.ts +12 -0
- package/dist/recover-isolated.d.ts.map +1 -1
- package/dist/recover-isolated.js +5 -0
- package/dist/recover-isolated.js.map +1 -1
- package/dist/repo-config.d.ts +23 -2
- package/dist/repo-config.d.ts.map +1 -1
- package/dist/repo-config.js +53 -7
- package/dist/repo-config.js.map +1 -1
- package/dist/repo-mirror.d.ts.map +1 -1
- package/dist/repo-mirror.js +18 -2
- package/dist/repo-mirror.js.map +1 -1
- package/dist/review-verdict.js +1 -1
- package/dist/review-verdict.js.map +1 -1
- package/dist/run.d.ts +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +54 -19
- package/dist/run.js.map +1 -1
- package/dist/scan.d.ts +17 -8
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +22 -8
- package/dist/scan.js.map +1 -1
- package/dist/select-priority.d.ts +2 -2
- package/dist/select-priority.js +1 -1
- package/dist/select-priority.js.map +1 -1
- package/dist/sidecar-apply.js +1 -1
- package/dist/sidecar-apply.js.map +1 -1
- package/dist/sidecar.d.ts +45 -10
- package/dist/sidecar.d.ts.map +1 -1
- package/dist/sidecar.js +82 -2
- package/dist/sidecar.js.map +1 -1
- package/dist/skills/answer-questions/SKILL.md +89 -0
- package/dist/skills/capture-signal/SKILL.md +52 -0
- package/dist/skills/convert-from-prd-to-spec/SKILL.md +90 -0
- package/dist/skills/drive-tasks/SKILL.md +218 -0
- package/dist/skills/from-idea/SKILL.md +83 -0
- package/dist/skills/merge-prs/SKILL.md +70 -0
- package/dist/skills/orchestrate/SKILL.md +101 -0
- package/dist/skills/promote/SKILL.md +35 -0
- package/dist/skills/review/SKILL.md +16 -0
- package/dist/skills/setup/SKILL.md +258 -0
- package/dist/skills/setup/protocol/ADR-FORMAT.md +47 -0
- package/dist/skills/setup/protocol/CLAIM-PROTOCOL.md +224 -0
- package/dist/skills/setup/protocol/REVIEW-PROTOCOL.md +122 -0
- package/dist/skills/setup/protocol/SURFACE-PROTOCOL.md +135 -0
- package/dist/skills/setup/protocol/TASKING-PROTOCOL.md +124 -0
- package/dist/skills/setup/protocol/WORK-CONTRACT.md +280 -0
- package/dist/skills/setup/protocol/spec-template.md +71 -0
- package/dist/skills/setup/protocol/task-template.md +65 -0
- package/dist/skills/surface-questions/SKILL.md +16 -0
- package/dist/skills/to-spec/SKILL.md +34 -0
- package/dist/skills/to-task/SKILL.md +19 -0
- package/dist/skills/triage-observations/SKILL.md +78 -0
- package/dist/skills/work/SKILL.md +51 -0
- package/dist/slug-namespace.d.ts +5 -5
- package/dist/slug-namespace.js +5 -5
- package/dist/slug-namespace.js.map +1 -1
- package/dist/spec-complete.d.ts.map +1 -1
- package/dist/spec-complete.js +2 -3
- package/dist/spec-complete.js.map +1 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +51 -57
- package/dist/start.js.map +1 -1
- package/dist/surface-gate.d.ts.map +1 -1
- package/dist/surface-gate.js +10 -3
- package/dist/surface-gate.js.map +1 -1
- package/dist/surface-persist.js +1 -1
- package/dist/surface-persist.js.map +1 -1
- package/dist/tasker-review-loop.d.ts +4 -3
- package/dist/tasker-review-loop.d.ts.map +1 -1
- package/dist/tasker-review-loop.js.map +1 -1
- package/dist/tasking-lock.d.ts +2 -2
- package/dist/tasking-lock.d.ts.map +1 -1
- package/dist/tasking-lock.js +53 -32
- package/dist/tasking-lock.js.map +1 -1
- package/dist/tasking.d.ts +40 -6
- package/dist/tasking.d.ts.map +1 -1
- package/dist/tasking.js +224 -12
- package/dist/tasking.js.map +1 -1
- package/dist/triage-persist.d.ts +10 -6
- package/dist/triage-persist.d.ts.map +1 -1
- package/dist/triage-persist.js +34 -4
- package/dist/triage-persist.js.map +1 -1
- package/dist/vendor/incur/agents.d.ts +58 -0
- package/dist/vendor/incur/agents.d.ts.map +1 -0
- package/dist/vendor/incur/agents.js +343 -0
- package/dist/vendor/incur/agents.js.map +1 -0
- package/dist/verify-workflow-template.js +1 -1
- package/dist/watch-session.d.ts +11 -3
- package/dist/watch-session.d.ts.map +1 -1
- package/dist/watch-session.js +94 -7
- package/dist/watch-session.js.map +1 -1
- package/dist/work-layout.d.ts +7 -3
- package/dist/work-layout.d.ts.map +1 -1
- package/dist/work-layout.js +6 -3
- package/dist/work-layout.js.map +1 -1
- package/dist/workspace.d.ts +1 -1
- package/package.json +2 -2
- package/src/advance-drivers.ts +16 -3
- package/src/advance-lifecycle-template.ts +89 -4
- package/src/advance-treeless-publish.ts +45 -0
- package/src/advance.ts +467 -87
- package/src/advancing-lock.ts +96 -1
- package/src/agent-launch.ts +37 -12
- package/src/agent-stop.ts +60 -2
- package/src/apply-decide.ts +36 -7
- package/src/apply-merge-action.ts +45 -7
- package/src/apply-persist.ts +228 -54
- package/src/apply-stuck-action.ts +260 -0
- package/src/brand.ts +14 -2
- package/src/cli-spinner.ts +1 -1
- package/src/cli.ts +401 -70
- package/src/close-job-template.ts +1 -1
- package/src/complete.ts +110 -52
- package/src/config.ts +107 -13
- package/src/continue-branch.ts +22 -0
- package/src/decision-engine.ts +55 -17
- package/src/do-autopick.ts +12 -1
- package/src/do-config.ts +1 -1
- package/src/do.ts +511 -38
- package/src/env-config.ts +12 -4
- package/src/failure-cause.ts +30 -1
- package/src/format.ts +10 -30
- package/src/frontmatter.ts +35 -5
- package/src/gc.ts +172 -9
- package/src/github.ts +78 -0
- package/src/harness.ts +25 -0
- package/src/index.ts +10 -0
- package/src/install-ci-branch-protection.ts +282 -57
- package/src/install-ci-core.ts +30 -3
- package/src/install-ci-github.ts +86 -0
- package/src/install-skills.ts +166 -0
- package/src/intake-trigger-template.ts +1 -1
- package/src/intake.ts +46 -11
- package/src/integration-core.ts +199 -65
- package/src/integrator.ts +22 -9
- package/src/isolation.ts +11 -2
- package/src/item-lock.ts +485 -341
- package/src/ledger-write.ts +135 -150
- package/src/lifecycle-gather.ts +29 -6
- package/src/lifecycle-pools.ts +67 -9
- package/src/merge-question-surfacer.ts +28 -4
- package/src/migrate-stuck-locks.ts +451 -0
- package/src/needs-attention.ts +857 -84
- package/src/orphan-sidecar.ts +47 -6
- package/src/pi-harness.ts +82 -2
- package/src/placement.ts +3 -3
- package/src/prd-to-spec.ts +13 -5
- package/src/reap-branches.ts +38 -14
- package/src/recover-isolated.ts +17 -0
- package/src/repo-config.ts +55 -6
- package/src/repo-mirror.ts +23 -1
- package/src/review-verdict.ts +1 -1
- package/src/run.ts +64 -18
- package/src/scan.ts +22 -8
- package/src/select-priority.ts +3 -3
- package/src/sidecar-apply.ts +1 -1
- package/src/sidecar.ts +138 -11
- package/src/slug-namespace.ts +7 -7
- package/src/spec-complete.ts +2 -3
- package/src/start.ts +53 -59
- package/src/surface-gate.ts +10 -3
- package/src/surface-persist.ts +1 -1
- package/src/tasker-review-loop.ts +4 -3
- package/src/tasking-lock.ts +52 -36
- package/src/tasking.ts +261 -17
- package/src/triage-persist.ts +56 -12
- package/src/vendor/incur/LICENSE +21 -0
- package/src/vendor/incur/README.md +19 -0
- package/src/vendor/incur/agents.ts +392 -0
- package/src/verify-workflow-template.ts +1 -1
- package/src/watch-session.ts +102 -7
- package/src/work-layout.ts +6 -3
- package/src/workspace.ts +1 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Agent configuration for skill installation. */
|
|
2
|
+
export type Agent = {
|
|
3
|
+
/** Display name. */
|
|
4
|
+
name: string;
|
|
5
|
+
/** Absolute path to the global skills directory. */
|
|
6
|
+
globalSkillsDir: string;
|
|
7
|
+
/** Project-relative skills directory path. */
|
|
8
|
+
projectSkillsDir: string;
|
|
9
|
+
/** Whether this agent uses the canonical `.agents/skills` path. */
|
|
10
|
+
universal: boolean;
|
|
11
|
+
/** Checks if the agent is installed on the system. */
|
|
12
|
+
detect(): boolean;
|
|
13
|
+
};
|
|
14
|
+
/** All known agent definitions. */
|
|
15
|
+
export declare const all: Agent[];
|
|
16
|
+
/** Detects which agents are installed on the system. */
|
|
17
|
+
export declare function detect(): Agent[];
|
|
18
|
+
/**
|
|
19
|
+
* Installs skill directories to the canonical location and creates symlinks for
|
|
20
|
+
* detected non-universal agents.
|
|
21
|
+
*
|
|
22
|
+
* @param sourceDir - Directory containing skill subdirectories (each with a `SKILL.md`).
|
|
23
|
+
* @param options - Installation options.
|
|
24
|
+
* @returns Installed canonical paths.
|
|
25
|
+
*/
|
|
26
|
+
export declare function install(sourceDir: string, options?: install.Options): install.Result;
|
|
27
|
+
export declare namespace install {
|
|
28
|
+
type Options = {
|
|
29
|
+
/** Override detected agents. */
|
|
30
|
+
agents?: Agent[] | undefined;
|
|
31
|
+
/** Working directory for project-local installs. */
|
|
32
|
+
cwd?: string | undefined;
|
|
33
|
+
/** Install globally. Defaults to `true`. */
|
|
34
|
+
global?: boolean | undefined;
|
|
35
|
+
};
|
|
36
|
+
type Result = {
|
|
37
|
+
/** Canonical install paths. */
|
|
38
|
+
paths: string[];
|
|
39
|
+
/** Per-agent install details (non-universal agents only). */
|
|
40
|
+
agents: AgentInstall[];
|
|
41
|
+
};
|
|
42
|
+
type AgentInstall = {
|
|
43
|
+
/** Agent display name. */
|
|
44
|
+
agent: string;
|
|
45
|
+
/** Installed path. */
|
|
46
|
+
path: string;
|
|
47
|
+
/** Whether it was symlinked or copied. */
|
|
48
|
+
mode: 'symlink' | 'copy';
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Removes a skill by name from the canonical location and all detected agent directories.
|
|
53
|
+
*/
|
|
54
|
+
export declare function remove(skillName: string, options?: {
|
|
55
|
+
global?: boolean | undefined;
|
|
56
|
+
cwd?: string | undefined;
|
|
57
|
+
}): void;
|
|
58
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/vendor/incur/agents.ts"],"names":[],"mappings":"AAwCA,kDAAkD;AAClD,MAAM,MAAM,KAAK,GAAG;IAClB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAA;IACxB,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAA;IAClB,sDAAsD;IACtD,MAAM,IAAI,OAAO,CAAA;CAClB,CAAA;AAOD,mCAAmC;AACnC,eAAO,MAAM,GAAG,EAAE,KAAK,EAuJtB,CAAA;AAED,wDAAwD;AACxD,wBAAgB,MAAM,IAAI,KAAK,EAAE,CAEhC;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,OAAY,GAAG,OAAO,CAAC,MAAM,CAoDxF;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,OAAO,GAAG;QACb,gCAAgC;QAChC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;QAC5B,oDAAoD;QACpD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACxB,4CAA4C;QAC5C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC7B,CAAA;IACD,KAAK,MAAM,GAAG;QACZ,+BAA+B;QAC/B,KAAK,EAAE,MAAM,EAAE,CAAA;QACf,6DAA6D;QAC7D,MAAM,EAAE,YAAY,EAAE,CAAA;KACvB,CAAA;IACD,KAAK,YAAY,GAAG;QAClB,0BAA0B;QAC1B,KAAK,EAAE,MAAM,CAAA;QACb,sBAAsB;QACtB,IAAI,EAAE,MAAM,CAAA;QACZ,0CAA0C;QAC1C,IAAI,EAAE,SAAS,GAAG,MAAM,CAAA;KACzB,CAAA;CACF;AAED;;GAEG;AACH,wBAAgB,MAAM,CACpB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,QAczE"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// VENDORED FROM: https://github.com/wevm/incur
|
|
3
|
+
// Source: src/internal/agents.ts
|
|
4
|
+
// License: MIT (see ./LICENSE beside this file)
|
|
5
|
+
// Copyright: (c) 2025-present weth, LLC
|
|
6
|
+
//
|
|
7
|
+
// This file is a VERBATIM copy of the upstream `src/internal/agents.ts` from
|
|
8
|
+
// wevm/incur, preserved byte-close so future upstream updates are a mechanical
|
|
9
|
+
// re-copy. Do NOT edit it in place — put all dorfl wrapper code OUTSIDE this
|
|
10
|
+
// directory (see `../../install-skills.ts`). Only the block ABOVE this line is
|
|
11
|
+
// dorfl-authored (attribution header). See `./README.md` for provenance and
|
|
12
|
+
// the `docs/adr/skill-install-vendors-incur-agents-map.md` ADR for why we
|
|
13
|
+
// vendor rather than depend.
|
|
14
|
+
//
|
|
15
|
+
// MIT permission notice (required by upstream license, kept in-file so the
|
|
16
|
+
// attribution survives isolation from the sibling LICENSE):
|
|
17
|
+
//
|
|
18
|
+
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
19
|
+
// copy of this software and associated documentation files (the "Software"),
|
|
20
|
+
// to deal in the Software without restriction, including without limitation
|
|
21
|
+
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
22
|
+
// and/or sell copies of the Software, and to permit persons to whom the
|
|
23
|
+
// Software is furnished to do so, subject to the following conditions:
|
|
24
|
+
//
|
|
25
|
+
// The above copyright notice and this permission notice shall be included
|
|
26
|
+
// in all copies or substantial portions of the Software.
|
|
27
|
+
//
|
|
28
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
29
|
+
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
30
|
+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
31
|
+
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
32
|
+
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
33
|
+
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
34
|
+
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
import * as fs from 'node:fs';
|
|
37
|
+
import * as os from 'node:os';
|
|
38
|
+
import * as path from 'node:path';
|
|
39
|
+
const home = os.homedir();
|
|
40
|
+
const configHome = process.env.XDG_CONFIG_HOME || path.join(home, '.config');
|
|
41
|
+
const claudeHome = process.env.CLAUDE_CONFIG_DIR?.trim() || path.join(home, '.claude');
|
|
42
|
+
const codexHome = process.env.CODEX_HOME?.trim() || path.join(home, '.codex');
|
|
43
|
+
/** All known agent definitions. */
|
|
44
|
+
export const all = [
|
|
45
|
+
// Universal agents (project skillsDir = .agents/skills)
|
|
46
|
+
{
|
|
47
|
+
name: 'Amp',
|
|
48
|
+
globalSkillsDir: path.join(configHome, 'agents', 'skills'),
|
|
49
|
+
projectSkillsDir: '.agents/skills',
|
|
50
|
+
universal: true,
|
|
51
|
+
detect: () => fs.existsSync(path.join(configHome, 'amp')),
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'Cline',
|
|
55
|
+
globalSkillsDir: path.join(home, '.agents', 'skills'),
|
|
56
|
+
projectSkillsDir: '.agents/skills',
|
|
57
|
+
universal: true,
|
|
58
|
+
detect: () => fs.existsSync(path.join(home, '.cline')),
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Codex',
|
|
62
|
+
globalSkillsDir: path.join(codexHome, 'skills'),
|
|
63
|
+
projectSkillsDir: '.agents/skills',
|
|
64
|
+
universal: true,
|
|
65
|
+
detect: () => fs.existsSync(codexHome),
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'Cursor',
|
|
69
|
+
globalSkillsDir: path.join(home, '.cursor', 'skills'),
|
|
70
|
+
projectSkillsDir: '.agents/skills',
|
|
71
|
+
universal: true,
|
|
72
|
+
detect: () => fs.existsSync(path.join(home, '.cursor')),
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'Gemini CLI',
|
|
76
|
+
globalSkillsDir: path.join(home, '.gemini', 'skills'),
|
|
77
|
+
projectSkillsDir: '.agents/skills',
|
|
78
|
+
universal: true,
|
|
79
|
+
detect: () => fs.existsSync(path.join(home, '.gemini')),
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'GitHub Copilot',
|
|
83
|
+
globalSkillsDir: path.join(home, '.copilot', 'skills'),
|
|
84
|
+
projectSkillsDir: '.agents/skills',
|
|
85
|
+
universal: true,
|
|
86
|
+
detect: () => fs.existsSync(path.join(home, '.copilot')),
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'Kimi CLI',
|
|
90
|
+
globalSkillsDir: path.join(configHome, 'agents', 'skills'),
|
|
91
|
+
projectSkillsDir: '.agents/skills',
|
|
92
|
+
universal: true,
|
|
93
|
+
detect: () => fs.existsSync(path.join(home, '.kimi')),
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'OpenCode',
|
|
97
|
+
globalSkillsDir: path.join(configHome, 'opencode', 'skills'),
|
|
98
|
+
projectSkillsDir: '.agents/skills',
|
|
99
|
+
universal: true,
|
|
100
|
+
detect: () => fs.existsSync(path.join(configHome, 'opencode')),
|
|
101
|
+
},
|
|
102
|
+
// Non-universal agents (need symlink from their skills dir to canonical)
|
|
103
|
+
{
|
|
104
|
+
name: 'Claude Code',
|
|
105
|
+
globalSkillsDir: path.join(claudeHome, 'skills'),
|
|
106
|
+
projectSkillsDir: '.claude/skills',
|
|
107
|
+
universal: false,
|
|
108
|
+
detect: () => fs.existsSync(claudeHome),
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'Windsurf',
|
|
112
|
+
globalSkillsDir: path.join(home, '.codeium', 'windsurf', 'skills'),
|
|
113
|
+
projectSkillsDir: '.windsurf/skills',
|
|
114
|
+
universal: false,
|
|
115
|
+
detect: () => fs.existsSync(path.join(home, '.codeium', 'windsurf')),
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'Continue',
|
|
119
|
+
globalSkillsDir: path.join(home, '.continue', 'skills'),
|
|
120
|
+
projectSkillsDir: '.continue/skills',
|
|
121
|
+
universal: false,
|
|
122
|
+
detect: () => fs.existsSync(path.join(home, '.continue')),
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'Roo',
|
|
126
|
+
globalSkillsDir: path.join(home, '.roo', 'skills'),
|
|
127
|
+
projectSkillsDir: '.roo/skills',
|
|
128
|
+
universal: false,
|
|
129
|
+
detect: () => fs.existsSync(path.join(home, '.roo')),
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'Kilo',
|
|
133
|
+
globalSkillsDir: path.join(home, '.kilocode', 'skills'),
|
|
134
|
+
projectSkillsDir: '.kilocode/skills',
|
|
135
|
+
universal: false,
|
|
136
|
+
detect: () => fs.existsSync(path.join(home, '.kilocode')),
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'Goose',
|
|
140
|
+
globalSkillsDir: path.join(configHome, 'goose', 'skills'),
|
|
141
|
+
projectSkillsDir: '.goose/skills',
|
|
142
|
+
universal: false,
|
|
143
|
+
detect: () => fs.existsSync(path.join(configHome, 'goose')),
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'Augment',
|
|
147
|
+
globalSkillsDir: path.join(home, '.augment', 'skills'),
|
|
148
|
+
projectSkillsDir: '.augment/skills',
|
|
149
|
+
universal: false,
|
|
150
|
+
detect: () => fs.existsSync(path.join(home, '.augment')),
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
name: 'Trae',
|
|
154
|
+
globalSkillsDir: path.join(home, '.trae', 'skills'),
|
|
155
|
+
projectSkillsDir: '.trae/skills',
|
|
156
|
+
universal: false,
|
|
157
|
+
detect: () => fs.existsSync(path.join(home, '.trae')),
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: 'Junie',
|
|
161
|
+
globalSkillsDir: path.join(home, '.junie', 'skills'),
|
|
162
|
+
projectSkillsDir: '.junie/skills',
|
|
163
|
+
universal: false,
|
|
164
|
+
detect: () => fs.existsSync(path.join(home, '.junie')),
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'Crush',
|
|
168
|
+
globalSkillsDir: path.join(configHome, 'crush', 'skills'),
|
|
169
|
+
projectSkillsDir: '.crush/skills',
|
|
170
|
+
universal: false,
|
|
171
|
+
detect: () => fs.existsSync(path.join(configHome, 'crush')),
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
name: 'Kiro CLI',
|
|
175
|
+
globalSkillsDir: path.join(home, '.kiro', 'skills'),
|
|
176
|
+
projectSkillsDir: '.kiro/skills',
|
|
177
|
+
universal: false,
|
|
178
|
+
detect: () => fs.existsSync(path.join(home, '.kiro')),
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: 'Qwen Code',
|
|
182
|
+
globalSkillsDir: path.join(home, '.qwen', 'skills'),
|
|
183
|
+
projectSkillsDir: '.qwen/skills',
|
|
184
|
+
universal: false,
|
|
185
|
+
detect: () => fs.existsSync(path.join(home, '.qwen')),
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: 'OpenHands',
|
|
189
|
+
globalSkillsDir: path.join(home, '.openhands', 'skills'),
|
|
190
|
+
projectSkillsDir: '.openhands/skills',
|
|
191
|
+
universal: false,
|
|
192
|
+
detect: () => fs.existsSync(path.join(home, '.openhands')),
|
|
193
|
+
},
|
|
194
|
+
];
|
|
195
|
+
/** Detects which agents are installed on the system. */
|
|
196
|
+
export function detect() {
|
|
197
|
+
return all.filter((a) => a.detect());
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Installs skill directories to the canonical location and creates symlinks for
|
|
201
|
+
* detected non-universal agents.
|
|
202
|
+
*
|
|
203
|
+
* @param sourceDir - Directory containing skill subdirectories (each with a `SKILL.md`).
|
|
204
|
+
* @param options - Installation options.
|
|
205
|
+
* @returns Installed canonical paths.
|
|
206
|
+
*/
|
|
207
|
+
export function install(sourceDir, options = {}) {
|
|
208
|
+
const isGlobal = options.global !== false;
|
|
209
|
+
const cwd = options.cwd || process.cwd();
|
|
210
|
+
const base = isGlobal ? home : cwd;
|
|
211
|
+
const canonicalBase = path.join(base, '.agents', 'skills');
|
|
212
|
+
const detected = options.agents ?? detect();
|
|
213
|
+
const paths = [];
|
|
214
|
+
const agents = [];
|
|
215
|
+
for (const skill of discoverSkills(sourceDir)) {
|
|
216
|
+
const canonicalDir = path.join(canonicalBase, skill.name);
|
|
217
|
+
// Copy to canonical location
|
|
218
|
+
rmForce(canonicalDir);
|
|
219
|
+
fs.mkdirSync(canonicalDir, { recursive: true });
|
|
220
|
+
if (skill.root)
|
|
221
|
+
fs.copyFileSync(path.join(skill.dir, 'SKILL.md'), path.join(canonicalDir, 'SKILL.md'));
|
|
222
|
+
else
|
|
223
|
+
fs.cpSync(skill.dir, canonicalDir, { recursive: true });
|
|
224
|
+
paths.push(canonicalDir);
|
|
225
|
+
// Create symlinks for non-universal agents
|
|
226
|
+
for (const agent of detected) {
|
|
227
|
+
if (agent.universal)
|
|
228
|
+
continue;
|
|
229
|
+
const agentSkillsDir = isGlobal
|
|
230
|
+
? agent.globalSkillsDir
|
|
231
|
+
: path.join(cwd, agent.projectSkillsDir);
|
|
232
|
+
const agentDir = path.join(agentSkillsDir, skill.name);
|
|
233
|
+
// Skip if agent dir resolves to canonical (no symlink needed)
|
|
234
|
+
if (agentDir === canonicalDir)
|
|
235
|
+
continue;
|
|
236
|
+
try {
|
|
237
|
+
rmForce(agentDir);
|
|
238
|
+
fs.mkdirSync(path.dirname(agentDir), { recursive: true });
|
|
239
|
+
// Resolve through any existing symlinks in parent directories
|
|
240
|
+
const realLinkDir = resolveParent(path.dirname(agentDir));
|
|
241
|
+
const realTarget = resolveParent(canonicalDir);
|
|
242
|
+
const rel = path.relative(realLinkDir, realTarget);
|
|
243
|
+
fs.symlinkSync(rel, agentDir);
|
|
244
|
+
agents.push({ agent: agent.name, path: agentDir, mode: 'symlink' });
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// Fallback to copy if symlink fails (e.g. Windows without permissions)
|
|
248
|
+
try {
|
|
249
|
+
fs.cpSync(canonicalDir, agentDir, { recursive: true });
|
|
250
|
+
agents.push({ agent: agent.name, path: agentDir, mode: 'copy' });
|
|
251
|
+
}
|
|
252
|
+
catch { }
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return { paths, agents };
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Removes a skill by name from the canonical location and all detected agent directories.
|
|
260
|
+
*/
|
|
261
|
+
export function remove(skillName, options = {}) {
|
|
262
|
+
const isGlobal = options.global !== false;
|
|
263
|
+
const cwd = options.cwd || process.cwd();
|
|
264
|
+
const base = isGlobal ? home : cwd;
|
|
265
|
+
const canonicalDir = path.join(base, '.agents', 'skills', skillName);
|
|
266
|
+
rmForce(canonicalDir);
|
|
267
|
+
for (const agent of detect()) {
|
|
268
|
+
if (agent.universal)
|
|
269
|
+
continue;
|
|
270
|
+
const agentSkillsDir = isGlobal ? agent.globalSkillsDir : path.join(cwd, agent.projectSkillsDir);
|
|
271
|
+
const agentDir = path.join(agentSkillsDir, skillName);
|
|
272
|
+
rmForce(agentDir);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/** Recursively discovers skill directories (those containing a `SKILL.md`). */
|
|
276
|
+
function discoverSkills(rootDir) {
|
|
277
|
+
const results = [];
|
|
278
|
+
function visit(dir) {
|
|
279
|
+
let entries;
|
|
280
|
+
try {
|
|
281
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
for (const entry of entries) {
|
|
287
|
+
if (!entry.isDirectory())
|
|
288
|
+
continue;
|
|
289
|
+
const subDir = path.join(dir, entry.name);
|
|
290
|
+
const skillPath = path.join(subDir, 'SKILL.md');
|
|
291
|
+
if (fs.existsSync(skillPath)) {
|
|
292
|
+
const content = fs.readFileSync(skillPath, 'utf8');
|
|
293
|
+
const nameMatch = content.match(/^name:\s*(.+)$/m);
|
|
294
|
+
results.push({ name: sanitizeName(nameMatch?.[1] ?? entry.name), dir: subDir });
|
|
295
|
+
}
|
|
296
|
+
visit(subDir);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
visit(rootDir);
|
|
300
|
+
// Root-level SKILL.md (e.g. depth=0)
|
|
301
|
+
const rootSkill = path.join(rootDir, 'SKILL.md');
|
|
302
|
+
if (fs.existsSync(rootSkill)) {
|
|
303
|
+
const content = fs.readFileSync(rootSkill, 'utf8');
|
|
304
|
+
const nameMatch = content.match(/^name:\s*(.+)$/m);
|
|
305
|
+
const name = sanitizeName(nameMatch?.[1] ?? 'skill');
|
|
306
|
+
if (!results.some((r) => r.name === name))
|
|
307
|
+
results.push({ name, dir: rootDir, root: true });
|
|
308
|
+
}
|
|
309
|
+
return results;
|
|
310
|
+
}
|
|
311
|
+
/** Sanitizes a skill name for use as a directory name. */
|
|
312
|
+
function sanitizeName(name) {
|
|
313
|
+
return name.trim().replace(/[/\\]/g, '-').replace(/\.\./g, '').slice(0, 255);
|
|
314
|
+
}
|
|
315
|
+
/** Removes a file, directory, or symlink (including broken symlinks). */
|
|
316
|
+
function rmForce(target) {
|
|
317
|
+
try {
|
|
318
|
+
const stat = fs.lstatSync(target);
|
|
319
|
+
if (stat.isSymbolicLink())
|
|
320
|
+
fs.unlinkSync(target);
|
|
321
|
+
else
|
|
322
|
+
fs.rmSync(target, { recursive: true, force: true });
|
|
323
|
+
}
|
|
324
|
+
catch { }
|
|
325
|
+
}
|
|
326
|
+
/** Resolves parent directories through symlinks. */
|
|
327
|
+
function resolveParent(dir) {
|
|
328
|
+
try {
|
|
329
|
+
return fs.realpathSync(dir);
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
const parent = path.dirname(dir);
|
|
333
|
+
if (parent === dir)
|
|
334
|
+
return dir;
|
|
335
|
+
try {
|
|
336
|
+
return path.join(fs.realpathSync(parent), path.relative(parent, dir));
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return dir;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/vendor/incur/agents.ts"],"names":[],"mappings":"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"}
|
package/dist/watch-session.d.ts
CHANGED
|
@@ -17,9 +17,10 @@ export declare function boundaryLine(label: string, color: boolean): string;
|
|
|
17
17
|
* - a `{type:"message", message:{role:"assistant", content}}` record → for each
|
|
18
18
|
* `content[]` part: a `text` part yields its text (parts concatenated into
|
|
19
19
|
* ONE line, like the old `jq` `.content[]` select); a `toolCall` part yields
|
|
20
|
-
* `▶ <name>` (cyan; `name` OR `toolName`, defaulting to `tool
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* `▶ <name> <detail>` (cyan; `name` OR `toolName`, defaulting to `tool`;
|
|
21
|
+
* `<detail>` is the per-tool argument summary, truncated to 64 chars with a
|
|
22
|
+
* `…`); a `thinking` part (and anything else) is skipped. A plain-string
|
|
23
|
+
* `content` yields one text line.
|
|
23
24
|
* - everything else (`session`/`model_change`/`thinking_level_change`, user
|
|
24
25
|
* messages, tool results, blank/malformed lines) → `[]` (skipped).
|
|
25
26
|
*
|
|
@@ -38,6 +39,13 @@ export declare function formatWatchEvent(line: string, color: boolean): string[]
|
|
|
38
39
|
* message:{role:"assistant", content[]}}` records, takes the LAST one carrying
|
|
39
40
|
* non-empty `text`, and returns its concatenated text.
|
|
40
41
|
*
|
|
42
|
+
* Kept as a PURE `string → string | undefined` function on purpose: the pi
|
|
43
|
+
* adapter reads the session file and passes the JSONL text in, but a future
|
|
44
|
+
* stream/HTTP-shaped harness (opencode-style) can accumulate its own event
|
|
45
|
+
* stream into the same JSONL-shaped text and reuse this reader unchanged — the
|
|
46
|
+
* file shape does NOT leak through the `LaunchResult.output` seam (Option C).
|
|
47
|
+
* See `work/notes/findings/pi-harness-channels.md` (task `pi-harness-polish`).
|
|
48
|
+
*
|
|
41
49
|
* Returns `undefined` when the log has no assistant text at all — an absent log,
|
|
42
50
|
* a malformed/short log, or a run whose only assistant turn was tool-calls (no
|
|
43
51
|
* `text` part). A tool-only assistant turn is NOT a final answer, so a LATER
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-session.d.ts","sourceRoot":"","sources":["../src/watch-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch-session.d.ts","sourceRoot":"","sources":["../src/watch-session.ts"],"names":[],"mappings":"AA0JA,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAElE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAyBvE;AAoED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8BnE;AAED,MAAM,WAAW,oBAAoB;IACpC;;;;;;;OAOG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,KAAK,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAID;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAS;gBAEpB,OAAO,EAAE,oBAAoB;IAOzC,0EAA0E;IAC1E,KAAK,IAAI,IAAI;IAWb;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,sEAAsE;YACxD,IAAI;IAclB,8EAA8E;YAChE,KAAK;IA0BnB,iFAAiF;IACjF,OAAO,CAAC,UAAU;CAalB"}
|
package/dist/watch-session.js
CHANGED
|
@@ -12,6 +12,16 @@ import { open } from 'node:fs/promises';
|
|
|
12
12
|
* `--mode json` STREAM `ar-run.sh` piped. The tailer is pointed at that EXACT
|
|
13
13
|
* path (no newest-by-mtime dir guessing), so the stale-sibling race is gone.
|
|
14
14
|
*
|
|
15
|
+
* Studied (task `pi-harness-polish`, finding
|
|
16
|
+
* `work/notes/findings/pi-harness-channels.md`, pinned against pi 0.73.1 +
|
|
17
|
+
* session format v3): tailing the session file is deliberately the CHOSEN
|
|
18
|
+
* channel for `--watch`, not just what was easiest to reuse. `--mode json`'s
|
|
19
|
+
* STDOUT event vocabulary would be lower-latency but it is unversioned, would
|
|
20
|
+
* fork a second parser away from pi-remote's `session-pool.ts` reference walk
|
|
21
|
+
* this classifier mirrors, and the vocabulary-drift risk that already bit
|
|
22
|
+
* `do --watch` once applies MORE to it than to the versioned+migrated session
|
|
23
|
+
* file. Revisit only if pi's session format changes.
|
|
24
|
+
*
|
|
15
25
|
* A session-log record is `{"type":"message", "message":{role, content[]}}` (or a
|
|
16
26
|
* `session`/`model_change`/`thinking_level_change` preamble record). The earlier
|
|
17
27
|
* classifier matched the STREAM vocabulary (`tool_start`/`message_end`/`agent_end`),
|
|
@@ -20,8 +30,10 @@ import { open } from 'node:fs/promises';
|
|
|
20
30
|
* surfaces the same high-signal level `ar-run.sh --watch` gave, read off the
|
|
21
31
|
* SESSION-LOG shape:
|
|
22
32
|
*
|
|
23
|
-
* - an `assistant` `message` → its `content[]` `text` parts, then
|
|
24
|
-
* (cyan) per `content[]` `toolCall` part
|
|
33
|
+
* - an `assistant` `message` → its `content[]` `text` parts, then
|
|
34
|
+
* `▶ <name> <detail>` (cyan) per `content[]` `toolCall` part, where
|
|
35
|
+
* `<detail>` is the high-signal argument for that tool (a `read`'s path, a
|
|
36
|
+
* `bash`'s command, …), truncated to 64 chars with a trailing `…`;
|
|
25
37
|
* - `✓ agent finished` (green) on PROCESS EXIT — the session log has no
|
|
26
38
|
* `agent_end` event, so the tailer emits it once on `stop()`;
|
|
27
39
|
* - everything else (`session`/`model_change`/user messages/tool results/…) →
|
|
@@ -46,6 +58,69 @@ const RESET = '\u001b[0m';
|
|
|
46
58
|
function paint(text, color, code) {
|
|
47
59
|
return color ? `${code}${text}${RESET}` : text;
|
|
48
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* The max width of a tool-call DETAIL string (the `read <path>` / `bash <cmd>`
|
|
63
|
+
* argument summary appended after the tool name). A longer detail is truncated
|
|
64
|
+
* to this many characters with a trailing `…`, so a giant `bash` heredoc or a
|
|
65
|
+
* long path never floods the live view with one enormous line.
|
|
66
|
+
*/
|
|
67
|
+
const MAX_DETAIL_LENGTH = 64;
|
|
68
|
+
/** Truncate `text` to {@link MAX_DETAIL_LENGTH} chars, appending `…` when cut. */
|
|
69
|
+
function truncateDetail(text) {
|
|
70
|
+
// Collapse any embedded newlines/tabs to single spaces first: a multi-line
|
|
71
|
+
// `bash` command must stay ONE line in the tail view.
|
|
72
|
+
const oneLine = text.replace(/\s+/g, ' ').trim();
|
|
73
|
+
if (oneLine.length <= MAX_DETAIL_LENGTH) {
|
|
74
|
+
return oneLine;
|
|
75
|
+
}
|
|
76
|
+
return `${oneLine.slice(0, MAX_DETAIL_LENGTH)}…`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The FIRST non-empty string among `keys` in a tool-call's arguments object, or
|
|
80
|
+
* `undefined` when the args are absent / none of the keys carry a string. The
|
|
81
|
+
* args live under `arguments` (pi's canonical key) OR `args` (the variant seen
|
|
82
|
+
* in some session records), mirroring the `name || toolName` defensiveness used
|
|
83
|
+
* for the tool name itself.
|
|
84
|
+
*/
|
|
85
|
+
function firstArgString(part, keys) {
|
|
86
|
+
const rawArgs = (typeof part.arguments === 'object' && part.arguments) ||
|
|
87
|
+
(typeof part.args === 'object' && part.args) ||
|
|
88
|
+
undefined;
|
|
89
|
+
if (!rawArgs || rawArgs === null) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const args = rawArgs;
|
|
93
|
+
for (const key of keys) {
|
|
94
|
+
const value = args[key];
|
|
95
|
+
if (typeof value === 'string' && value !== '') {
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The high-signal ARGUMENT to show after a tool name, chosen per tool so the
|
|
103
|
+
* `▶ <name>` marker reads like the agent's actual action (`▶ read work/x.md`,
|
|
104
|
+
* `▶ bash pnpm -r build`). The mapping mirrors this harness's own tool set
|
|
105
|
+
* (read/edit/write/grep/find/ls take a `path`; bash a `command`; grep a
|
|
106
|
+
* `pattern`; find/ls a `pattern`/`path`); any unmapped tool falls back to a
|
|
107
|
+
* generic `path`/`command`/`pattern`/`query` probe so a new tool still shows
|
|
108
|
+
* *something* useful. Returns `''` when no informative arg is present.
|
|
109
|
+
*/
|
|
110
|
+
function toolCallDetail(name, part) {
|
|
111
|
+
const byTool = {
|
|
112
|
+
read: ['path'],
|
|
113
|
+
edit: ['path'],
|
|
114
|
+
write: ['path'],
|
|
115
|
+
ls: ['path'],
|
|
116
|
+
find: ['pattern', 'path'],
|
|
117
|
+
grep: ['pattern', 'path'],
|
|
118
|
+
bash: ['command'],
|
|
119
|
+
};
|
|
120
|
+
const keys = byTool[name] ?? ['path', 'command', 'pattern', 'query', 'file'];
|
|
121
|
+
const detail = firstArgString(part, keys);
|
|
122
|
+
return detail === undefined ? '' : truncateDetail(detail);
|
|
123
|
+
}
|
|
49
124
|
/** The green `✓ agent finished` line, emitted on PROCESS EXIT (not a log event). */
|
|
50
125
|
export function finishedLine(color) {
|
|
51
126
|
return paint('✓ agent finished', color, GREEN);
|
|
@@ -69,9 +144,10 @@ export function boundaryLine(label, color) {
|
|
|
69
144
|
* - a `{type:"message", message:{role:"assistant", content}}` record → for each
|
|
70
145
|
* `content[]` part: a `text` part yields its text (parts concatenated into
|
|
71
146
|
* ONE line, like the old `jq` `.content[]` select); a `toolCall` part yields
|
|
72
|
-
* `▶ <name>` (cyan; `name` OR `toolName`, defaulting to `tool
|
|
73
|
-
*
|
|
74
|
-
*
|
|
147
|
+
* `▶ <name> <detail>` (cyan; `name` OR `toolName`, defaulting to `tool`;
|
|
148
|
+
* `<detail>` is the per-tool argument summary, truncated to 64 chars with a
|
|
149
|
+
* `…`); a `thinking` part (and anything else) is skipped. A plain-string
|
|
150
|
+
* `content` yields one text line.
|
|
75
151
|
* - everything else (`session`/`model_change`/`thinking_level_change`, user
|
|
76
152
|
* messages, tool results, blank/malformed lines) → `[]` (skipped).
|
|
77
153
|
*
|
|
@@ -113,7 +189,9 @@ export function formatWatchEvent(line, color) {
|
|
|
113
189
|
* pi-remote's `session-pool.ts` reference parser. The `text` parts are
|
|
114
190
|
* concatenated into a SINGLE leading line (so a multi-part assistant turn reads
|
|
115
191
|
* as one sentence, as `ar-run.sh --watch` showed it); each `toolCall` part adds a
|
|
116
|
-
* `▶ <name>` line after it
|
|
192
|
+
* `▶ <name> <detail>` line after it (`<detail>` = the tool's high-signal
|
|
193
|
+
* argument, truncated to 64 chars). A plain-string content yields the single
|
|
194
|
+
* text line.
|
|
117
195
|
* `thinking` parts and any other block type are skipped.
|
|
118
196
|
*/
|
|
119
197
|
function assistantLines(content, color) {
|
|
@@ -134,7 +212,9 @@ function assistantLines(content, color) {
|
|
|
134
212
|
const name = (typeof p.name === 'string' && p.name !== '' && p.name) ||
|
|
135
213
|
(typeof p.toolName === 'string' && p.toolName !== '' && p.toolName) ||
|
|
136
214
|
'tool';
|
|
137
|
-
|
|
215
|
+
const detail = toolCallDetail(name, p);
|
|
216
|
+
const label = detail === '' ? name : `${name} ${detail}`;
|
|
217
|
+
lines.push(paint(`▶ ${label}`, color, CYAN));
|
|
138
218
|
}
|
|
139
219
|
// `text` is collected by assistantContentText; `thinking` and any other
|
|
140
220
|
// block type are skipped.
|
|
@@ -175,6 +255,13 @@ function assistantContentText(content) {
|
|
|
175
255
|
* message:{role:"assistant", content[]}}` records, takes the LAST one carrying
|
|
176
256
|
* non-empty `text`, and returns its concatenated text.
|
|
177
257
|
*
|
|
258
|
+
* Kept as a PURE `string → string | undefined` function on purpose: the pi
|
|
259
|
+
* adapter reads the session file and passes the JSONL text in, but a future
|
|
260
|
+
* stream/HTTP-shaped harness (opencode-style) can accumulate its own event
|
|
261
|
+
* stream into the same JSONL-shaped text and reuse this reader unchanged — the
|
|
262
|
+
* file shape does NOT leak through the `LaunchResult.output` seam (Option C).
|
|
263
|
+
* See `work/notes/findings/pi-harness-channels.md` (task `pi-harness-polish`).
|
|
264
|
+
*
|
|
178
265
|
* Returns `undefined` when the log has no assistant text at all — an absent log,
|
|
179
266
|
* a malformed/short log, or a run whose only assistant turn was tool-calls (no
|
|
180
267
|
* `text` part). A tool-only assistant turn is NOT a final answer, so a LATER
|