@soleri/core 9.15.0 → 9.16.7
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/data/flows/deliver.flow.yaml +11 -0
- package/data/flows/design.flow.yaml +4 -14
- package/data/flows/enhance.flow.yaml +10 -0
- package/data/flows/explore.flow.yaml +16 -0
- package/data/flows/fix.flow.yaml +1 -1
- package/data/flows/review.flow.yaml +13 -4
- package/dist/capabilities/chain-mapping.d.ts.map +1 -1
- package/dist/capabilities/chain-mapping.js +5 -4
- package/dist/capabilities/chain-mapping.js.map +1 -1
- package/dist/capabilities/registry.d.ts +6 -0
- package/dist/capabilities/registry.d.ts.map +1 -1
- package/dist/capabilities/registry.js +3 -2
- package/dist/capabilities/registry.js.map +1 -1
- package/dist/context/context-engine.js +1 -1
- package/dist/context/context-engine.js.map +1 -1
- package/dist/engine/core-ops.d.ts.map +1 -1
- package/dist/engine/core-ops.js +38 -1
- package/dist/engine/core-ops.js.map +1 -1
- package/dist/flows/epilogue.d.ts +5 -1
- package/dist/flows/epilogue.d.ts.map +1 -1
- package/dist/flows/epilogue.js +11 -3
- package/dist/flows/epilogue.js.map +1 -1
- package/dist/flows/executor.d.ts.map +1 -1
- package/dist/flows/executor.js +13 -5
- package/dist/flows/executor.js.map +1 -1
- package/dist/flows/index.d.ts +1 -2
- package/dist/flows/index.d.ts.map +1 -1
- package/dist/flows/index.js +1 -0
- package/dist/flows/index.js.map +1 -1
- package/dist/flows/plan-builder.d.ts +17 -1
- package/dist/flows/plan-builder.d.ts.map +1 -1
- package/dist/flows/plan-builder.js +67 -6
- package/dist/flows/plan-builder.js.map +1 -1
- package/dist/flows/probes.d.ts +1 -1
- package/dist/flows/probes.d.ts.map +1 -1
- package/dist/flows/probes.js +15 -3
- package/dist/flows/probes.js.map +1 -1
- package/dist/flows/types.d.ts +31 -4
- package/dist/flows/types.d.ts.map +1 -1
- package/dist/flows/types.js +6 -1
- package/dist/flows/types.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/packs/pack-installer.d.ts.map +1 -1
- package/dist/packs/pack-installer.js +28 -2
- package/dist/packs/pack-installer.js.map +1 -1
- package/dist/planning/planner-types.d.ts +2 -0
- package/dist/planning/planner-types.d.ts.map +1 -1
- package/dist/planning/planner.d.ts +1 -0
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +7 -0
- package/dist/planning/planner.js.map +1 -1
- package/dist/playbooks/playbook-executor.d.ts +10 -1
- package/dist/playbooks/playbook-executor.d.ts.map +1 -1
- package/dist/playbooks/playbook-executor.js +8 -2
- package/dist/playbooks/playbook-executor.js.map +1 -1
- package/dist/playbooks/playbook-types.d.ts +8 -0
- package/dist/playbooks/playbook-types.d.ts.map +1 -1
- package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
- package/dist/runtime/admin-extra-ops.js +30 -0
- package/dist/runtime/admin-extra-ops.js.map +1 -1
- package/dist/runtime/admin-ops.d.ts.map +1 -1
- package/dist/runtime/admin-ops.js +60 -21
- package/dist/runtime/admin-ops.js.map +1 -1
- package/dist/runtime/admin-setup-ops.d.ts +11 -0
- package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
- package/dist/runtime/admin-setup-ops.js +87 -17
- package/dist/runtime/admin-setup-ops.js.map +1 -1
- package/dist/runtime/capture-ops.d.ts.map +1 -1
- package/dist/runtime/capture-ops.js +38 -12
- package/dist/runtime/capture-ops.js.map +1 -1
- package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
- package/dist/runtime/facades/brain-facade.js +16 -4
- package/dist/runtime/facades/brain-facade.js.map +1 -1
- package/dist/runtime/facades/context-facade.d.ts.map +1 -1
- package/dist/runtime/facades/context-facade.js +9 -3
- package/dist/runtime/facades/context-facade.js.map +1 -1
- package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
- package/dist/runtime/facades/memory-facade.js +20 -7
- package/dist/runtime/facades/memory-facade.js.map +1 -1
- package/dist/runtime/facades/orchestrate-facade.d.ts.map +1 -1
- package/dist/runtime/facades/orchestrate-facade.js +12 -0
- package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
- package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
- package/dist/runtime/facades/plan-facade.js +113 -4
- package/dist/runtime/facades/plan-facade.js.map +1 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +24 -3
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/orchestrate-ops.d.ts +21 -0
- package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
- package/dist/runtime/orchestrate-ops.js +132 -38
- package/dist/runtime/orchestrate-ops.js.map +1 -1
- package/dist/runtime/schema-helpers.d.ts.map +1 -1
- package/dist/runtime/schema-helpers.js +4 -0
- package/dist/runtime/schema-helpers.js.map +1 -1
- package/dist/runtime/vault-linking-ops.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.js +16 -3
- package/dist/runtime/vault-linking-ops.js.map +1 -1
- package/dist/scheduler/cron-validator.d.ts +15 -0
- package/dist/scheduler/cron-validator.d.ts.map +1 -0
- package/dist/scheduler/cron-validator.js +93 -0
- package/dist/scheduler/cron-validator.js.map +1 -0
- package/dist/scheduler/platform-linux.d.ts +14 -0
- package/dist/scheduler/platform-linux.d.ts.map +1 -0
- package/dist/scheduler/platform-linux.js +107 -0
- package/dist/scheduler/platform-linux.js.map +1 -0
- package/dist/scheduler/platform-macos.d.ts +15 -0
- package/dist/scheduler/platform-macos.d.ts.map +1 -0
- package/dist/scheduler/platform-macos.js +131 -0
- package/dist/scheduler/platform-macos.js.map +1 -0
- package/dist/scheduler/scheduler-ops.d.ts +14 -0
- package/dist/scheduler/scheduler-ops.d.ts.map +1 -0
- package/dist/scheduler/scheduler-ops.js +77 -0
- package/dist/scheduler/scheduler-ops.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +55 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/scheduler/scheduler.js +144 -0
- package/dist/scheduler/scheduler.js.map +1 -0
- package/dist/scheduler/types.d.ts +48 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +6 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/skills/sync-skills.d.ts +11 -0
- package/dist/skills/sync-skills.d.ts.map +1 -1
- package/dist/skills/sync-skills.js +132 -38
- package/dist/skills/sync-skills.js.map +1 -1
- package/dist/utils/worktree-reaper.d.ts +38 -0
- package/dist/utils/worktree-reaper.d.ts.map +1 -0
- package/dist/utils/worktree-reaper.js +85 -0
- package/dist/utils/worktree-reaper.js.map +1 -0
- package/dist/vault/scope-detector.d.ts.map +1 -1
- package/dist/vault/scope-detector.js +37 -4
- package/dist/vault/scope-detector.js.map +1 -1
- package/dist/vault/vault-entries.d.ts.map +1 -1
- package/dist/vault/vault-entries.js +3 -1
- package/dist/vault/vault-entries.js.map +1 -1
- package/package.json +1 -1
- package/src/agency/agency-manager.test.ts +4 -4
- package/src/agency/default-rules.test.ts +0 -13
- package/src/brain/brain-intelligence.test.ts +0 -5
- package/src/brain/second-brain-features.test.ts +2 -14
- package/src/capabilities/chain-mapping.test.ts +1 -6
- package/src/capabilities/chain-mapping.ts +6 -4
- package/src/capabilities/registry.test.ts +1 -1
- package/src/capabilities/registry.ts +9 -2
- package/src/chat/agent-loop.test.ts +1 -1
- package/src/chat/chat-enhanced.test.ts +0 -8
- package/src/claudemd/compose.test.ts +0 -5
- package/src/context/context-engine.test.ts +0 -1
- package/src/context/context-engine.ts +1 -1
- package/src/control/intent-router.test.ts +2 -2
- package/src/curator/tag-manager.test.ts +0 -4
- package/src/domain-packs/types.test.ts +0 -5
- package/src/dream/dream.test.ts +0 -7
- package/src/enforcement/registry.test.ts +2 -2
- package/src/engine/core-ops.test.ts +4 -22
- package/src/engine/core-ops.ts +36 -1
- package/src/engine/module-manifest.test.ts +1 -31
- package/src/engine/register-engine.test.ts +3 -33
- package/src/errors/retry.test.ts +3 -1
- package/src/flows/chain-runner.test.ts +0 -6
- package/src/flows/context-router.test.ts +3 -3
- package/src/flows/epilogue.test.ts +40 -2
- package/src/flows/epilogue.ts +11 -2
- package/src/flows/executor.test.ts +48 -2
- package/src/flows/executor.ts +15 -5
- package/src/flows/index.ts +1 -3
- package/src/flows/plan-builder.test.ts +201 -0
- package/src/flows/plan-builder.ts +81 -5
- package/src/flows/probes.ts +17 -3
- package/src/flows/types.ts +31 -2
- package/src/health/health-registry.test.ts +3 -1
- package/src/index.ts +17 -0
- package/src/intake/dedup-gate.test.ts +2 -6
- package/src/intake/text-ingester.test.ts +3 -4
- package/src/llm/llm-client.test.ts +1 -1
- package/src/llm/utils.test.ts +1 -1
- package/src/migrations/migration-runner.test.ts +0 -1
- package/src/operator/operator-context-store.test.ts +0 -13
- package/src/operator/operator-profile.test.ts +2 -20
- package/src/packs/pack-installer.ts +28 -2
- package/src/packs/pack-system.test.ts +2 -2
- package/src/persona/defaults.test.ts +19 -19
- package/src/planning/gap-passes.test.ts +0 -46
- package/src/planning/gap-patterns.test.ts +0 -42
- package/src/planning/goal-ancestry.test.ts +3 -1
- package/src/planning/plan-lifecycle.test.ts +15 -7
- package/src/planning/planner-types.ts +2 -0
- package/src/planning/planner.ts +8 -0
- package/src/planning/reconciliation-engine.test.ts +3 -10
- package/src/planning/task-complexity-assessor.test.ts +0 -5
- package/src/planning/task-verifier.test.ts +3 -1
- package/src/playbooks/generic/generic-playbooks.test.ts +0 -28
- package/src/playbooks/index.test.ts +0 -55
- package/src/playbooks/playbook-executor.test.ts +76 -0
- package/src/playbooks/playbook-executor.ts +24 -3
- package/src/playbooks/playbook-types.ts +8 -0
- package/src/plugins/plugin-registry.test.ts +6 -2
- package/src/project/project-registry.test.ts +2 -0
- package/src/queue/async-infrastructure.test.ts +6 -4
- package/src/queue/job-queue.test.ts +13 -7
- package/src/runtime/admin-extra-ops.test.ts +35 -30
- package/src/runtime/admin-extra-ops.ts +30 -0
- package/src/runtime/admin-ops.test.ts +0 -4
- package/src/runtime/admin-ops.ts +63 -21
- package/src/runtime/admin-setup-ops.test.ts +185 -13
- package/src/runtime/admin-setup-ops.ts +86 -16
- package/src/runtime/archive-ops.test.ts +0 -28
- package/src/runtime/branching-ops.test.ts +0 -17
- package/src/runtime/capture-ops.test.ts +41 -16
- package/src/runtime/capture-ops.ts +78 -46
- package/src/runtime/chain-ops.test.ts +0 -21
- package/src/runtime/facades/admin-facade.test.ts +0 -34
- package/src/runtime/facades/agency-facade.test.ts +0 -39
- package/src/runtime/facades/archive-facade.test.ts +0 -43
- package/src/runtime/facades/brain-facade.test.ts +8 -99
- package/src/runtime/facades/brain-facade.ts +29 -12
- package/src/runtime/facades/branching-facade.test.ts +30 -17
- package/src/runtime/facades/chat-facade.test.ts +0 -91
- package/src/runtime/facades/chat-service-ops.test.ts +0 -24
- package/src/runtime/facades/chat-session-ops.test.ts +0 -12
- package/src/runtime/facades/chat-transport-ops.test.ts +0 -23
- package/src/runtime/facades/context-facade.test.ts +0 -17
- package/src/runtime/facades/context-facade.ts +11 -4
- package/src/runtime/facades/control-facade.test.ts +0 -30
- package/src/runtime/facades/curator-facade.test.ts +0 -33
- package/src/runtime/facades/intake-facade.test.ts +0 -33
- package/src/runtime/facades/links-facade.test.ts +0 -37
- package/src/runtime/facades/loop-facade.test.ts +0 -26
- package/src/runtime/facades/memory-facade.test.ts +0 -18
- package/src/runtime/facades/memory-facade.ts +27 -11
- package/src/runtime/facades/operator-facade.test.ts +0 -31
- package/src/runtime/facades/orchestrate-facade.test.ts +0 -21
- package/src/runtime/facades/orchestrate-facade.ts +12 -0
- package/src/runtime/facades/plan-facade.test.ts +7 -32
- package/src/runtime/facades/plan-facade.ts +137 -4
- package/src/runtime/facades/review-facade.test.ts +1 -49
- package/src/runtime/facades/sync-facade.test.ts +24 -41
- package/src/runtime/facades/tier-facade.test.ts +30 -22
- package/src/runtime/facades/vault-facade.test.ts +0 -41
- package/src/runtime/facades/vault-facade.ts +26 -3
- package/src/runtime/grading-ops.test.ts +0 -27
- package/src/runtime/intake-ops.test.ts +0 -19
- package/src/runtime/loop-ops.test.ts +0 -48
- package/src/runtime/memory-cross-project-ops.test.ts +0 -14
- package/src/runtime/memory-extra-ops.test.ts +4 -8
- package/src/runtime/orchestrate-ops.test.ts +238 -19
- package/src/runtime/orchestrate-ops.ts +166 -41
- package/src/runtime/pack-ops.test.ts +0 -26
- package/src/runtime/planning-extra-ops.test.ts +2 -14
- package/src/runtime/playbook-ops-execution.test.ts +9 -20
- package/src/runtime/playbook-ops.test.ts +4 -67
- package/src/runtime/review-ops.test.ts +0 -15
- package/src/runtime/schema-helpers.ts +4 -0
- package/src/runtime/sync-ops.test.ts +0 -18
- package/src/runtime/tier-ops.test.ts +0 -21
- package/src/runtime/vault-extra-ops.test.ts +0 -12
- package/src/runtime/vault-linking-ops.test.ts +0 -4
- package/src/runtime/vault-linking-ops.ts +26 -8
- package/src/runtime/vault-sharing-ops.test.ts +0 -9
- package/src/scheduler/cron-validator.ts +101 -0
- package/src/scheduler/platform-linux.ts +122 -0
- package/src/scheduler/platform-macos.ts +150 -0
- package/src/scheduler/scheduler-ops.ts +77 -0
- package/src/scheduler/scheduler.test.ts +247 -0
- package/src/scheduler/scheduler.ts +174 -0
- package/src/scheduler/types.ts +52 -0
- package/src/skills/__tests__/sync-skills.test.ts +6 -17
- package/src/skills/global-claude-md.test.ts +113 -0
- package/src/skills/sync-skills.ts +143 -35
- package/src/skills/validate-skills.test.ts +12 -11
- package/src/telemetry/telemetry.test.ts +1 -0
- package/src/transport/http-server.test.ts +3 -0
- package/src/transport/session-manager.test.ts +3 -1
- package/src/transport/token-auth.test.ts +6 -9
- package/src/transport/ws-server.test.ts +10 -2
- package/src/utils/worktree-reaper.ts +113 -0
- package/src/vault/__tests__/vault-characterization.test.ts +0 -108
- package/src/vault/linking.test.ts +0 -2
- package/src/vault/playbook.test.ts +4 -1
- package/src/vault/scope-detector.test.ts +3 -1
- package/src/vault/scope-detector.ts +42 -4
- package/src/vault/vault-connect.test.ts +1 -1
- package/src/vault/vault-entries.ts +3 -1
- package/src/vault/vault.test.ts +23 -8
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* macOS platform adapter — uses launchd (LaunchAgents) for scheduling.
|
|
3
|
+
*
|
|
4
|
+
* Plist files are written to ~/Library/LaunchAgents/
|
|
5
|
+
* and loaded/unloaded via launchctl.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, writeFileSync, rmSync, mkdirSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { homedir } from 'node:os';
|
|
10
|
+
import { execFileSync } from 'node:child_process';
|
|
11
|
+
const LAUNCH_AGENTS_DIR = join(homedir(), 'Library', 'LaunchAgents');
|
|
12
|
+
function plistPath(label) {
|
|
13
|
+
return join(LAUNCH_AGENTS_DIR, `${label}.plist`);
|
|
14
|
+
}
|
|
15
|
+
/** Convert a 5-field cron expression to launchd StartCalendarInterval. */
|
|
16
|
+
function cronToCalendarInterval(cron) {
|
|
17
|
+
const [minute, hour, day, month, weekday] = cron.split(/\s+/);
|
|
18
|
+
const base = {};
|
|
19
|
+
if (minute !== '*' && !minute.includes('/') && !minute.includes(',')) {
|
|
20
|
+
base['Minute'] = Number(minute);
|
|
21
|
+
}
|
|
22
|
+
// Expand comma-separated hours
|
|
23
|
+
const hours = hour === '*'
|
|
24
|
+
? null
|
|
25
|
+
: hour.includes(',')
|
|
26
|
+
? hour.split(',').map(Number)
|
|
27
|
+
: hour.startsWith('*/')
|
|
28
|
+
? null
|
|
29
|
+
: [Number(hour)];
|
|
30
|
+
if (!hours) {
|
|
31
|
+
// No specific hours — return single interval with base
|
|
32
|
+
return [base];
|
|
33
|
+
}
|
|
34
|
+
// Generate one calendar interval per hour
|
|
35
|
+
return hours.map((h) => {
|
|
36
|
+
const entry = { ...base, Hour: h };
|
|
37
|
+
if (day !== '*' && !day.includes('/') && !day.includes(','))
|
|
38
|
+
entry['Day'] = Number(day);
|
|
39
|
+
if (month !== '*' && !month.includes('/') && !month.includes(','))
|
|
40
|
+
entry['Month'] = Number(month);
|
|
41
|
+
if (weekday !== '*' && weekday !== '?' && !weekday.includes('/')) {
|
|
42
|
+
entry['Weekday'] = Number(weekday) % 7; // launchd uses 0-6 (Sunday = 0)
|
|
43
|
+
}
|
|
44
|
+
return entry;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function buildPlist(task, label) {
|
|
48
|
+
const intervals = cronToCalendarInterval(task.cronExpression);
|
|
49
|
+
const logBase = join(homedir(), '.soleri', 'logs', 'scheduler', task.name);
|
|
50
|
+
const intervalXml = intervals
|
|
51
|
+
.map((interval) => {
|
|
52
|
+
const keys = Object.entries(interval)
|
|
53
|
+
.map(([k, v]) => `\t\t\t<key>${k}</key>\n\t\t\t<integer>${v}</integer>`)
|
|
54
|
+
.join('\n');
|
|
55
|
+
return `\t\t<dict>\n${keys}\n\t\t</dict>`;
|
|
56
|
+
})
|
|
57
|
+
.join('\n');
|
|
58
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
59
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
60
|
+
<plist version="1.0">
|
|
61
|
+
<dict>
|
|
62
|
+
\t<key>Label</key>
|
|
63
|
+
\t<string>${label}</string>
|
|
64
|
+
\t<key>ProgramArguments</key>
|
|
65
|
+
\t<array>
|
|
66
|
+
\t\t<string>/usr/local/bin/claude</string>
|
|
67
|
+
\t\t<string>-p</string>
|
|
68
|
+
\t\t<string>${task.prompt.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</string>
|
|
69
|
+
\t\t<string>--project-dir</string>
|
|
70
|
+
\t\t<string>${task.projectPath}</string>
|
|
71
|
+
\t</array>
|
|
72
|
+
\t<key>WorkingDirectory</key>
|
|
73
|
+
\t<string>${task.projectPath}</string>
|
|
74
|
+
\t<key>StartCalendarInterval</key>
|
|
75
|
+
\t<array>
|
|
76
|
+
${intervalXml}
|
|
77
|
+
\t</array>
|
|
78
|
+
\t<key>StandardOutPath</key>
|
|
79
|
+
\t<string>${logBase}.log</string>
|
|
80
|
+
\t<key>StandardErrorPath</key>
|
|
81
|
+
\t<string>${logBase}.err</string>
|
|
82
|
+
\t<key>TimeOut</key>
|
|
83
|
+
\t<integer>600</integer>
|
|
84
|
+
\t<key>Disabled</key>
|
|
85
|
+
\t<${task.enabled ? 'false' : 'true'}/>
|
|
86
|
+
</dict>
|
|
87
|
+
</plist>
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
export class MacOSAdapter {
|
|
91
|
+
async create(task) {
|
|
92
|
+
const label = `com.soleri.${task.name}`;
|
|
93
|
+
mkdirSync(LAUNCH_AGENTS_DIR, { recursive: true });
|
|
94
|
+
mkdirSync(join(homedir(), '.soleri', 'logs', 'scheduler'), { recursive: true });
|
|
95
|
+
const plist = buildPlist(task, label);
|
|
96
|
+
writeFileSync(plistPath(label), plist, 'utf-8');
|
|
97
|
+
try {
|
|
98
|
+
// Unload first if it exists (idempotent update)
|
|
99
|
+
execFileSync('launchctl', ['unload', plistPath(label)], { stdio: 'pipe' });
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// OK — not loaded yet
|
|
103
|
+
}
|
|
104
|
+
if (task.enabled) {
|
|
105
|
+
execFileSync('launchctl', ['load', '-w', plistPath(label)], { stdio: 'pipe' });
|
|
106
|
+
}
|
|
107
|
+
return label;
|
|
108
|
+
}
|
|
109
|
+
async remove(platformId) {
|
|
110
|
+
const path = plistPath(platformId);
|
|
111
|
+
try {
|
|
112
|
+
execFileSync('launchctl', ['unload', path], { stdio: 'pipe' });
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// OK — may not be loaded
|
|
116
|
+
}
|
|
117
|
+
if (existsSync(path)) {
|
|
118
|
+
rmSync(path);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async exists(platformId) {
|
|
122
|
+
return existsSync(plistPath(platformId));
|
|
123
|
+
}
|
|
124
|
+
async pause(platformId) {
|
|
125
|
+
execFileSync('launchctl', ['unload', plistPath(platformId)], { stdio: 'pipe' });
|
|
126
|
+
}
|
|
127
|
+
async resume(platformId) {
|
|
128
|
+
execFileSync('launchctl', ['load', '-w', plistPath(platformId)], { stdio: 'pipe' });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=platform-macos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-macos.js","sourceRoot":"","sources":["../../src/scheduler/platform-macos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scheduler runtime ops — CRUD for cross-platform scheduled agent tasks.
|
|
3
|
+
*
|
|
4
|
+
* Ops:
|
|
5
|
+
* scheduler_create — create a new scheduled task
|
|
6
|
+
* scheduler_list — list all tasks with OS sync status
|
|
7
|
+
* scheduler_delete — remove a task from OS and DB
|
|
8
|
+
* scheduler_pause — disable a task without deleting it
|
|
9
|
+
* scheduler_resume — re-enable a paused task
|
|
10
|
+
*/
|
|
11
|
+
import type { OpDefinition } from '../facades/types.js';
|
|
12
|
+
import type { SchedulerStore } from './scheduler.js';
|
|
13
|
+
export declare function createSchedulerOps(store?: SchedulerStore): OpDefinition[];
|
|
14
|
+
//# sourceMappingURL=scheduler-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-ops.d.ts","sourceRoot":"","sources":["../../src/scheduler/scheduler-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,YAAY,EAAE,CA6DzE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scheduler runtime ops — CRUD for cross-platform scheduled agent tasks.
|
|
3
|
+
*
|
|
4
|
+
* Ops:
|
|
5
|
+
* scheduler_create — create a new scheduled task
|
|
6
|
+
* scheduler_list — list all tasks with OS sync status
|
|
7
|
+
* scheduler_delete — remove a task from OS and DB
|
|
8
|
+
* scheduler_pause — disable a task without deleting it
|
|
9
|
+
* scheduler_resume — re-enable a paused task
|
|
10
|
+
*/
|
|
11
|
+
import { Scheduler, InMemorySchedulerStore } from './scheduler.js';
|
|
12
|
+
export function createSchedulerOps(store) {
|
|
13
|
+
const scheduler = new Scheduler(undefined, store ?? new InMemorySchedulerStore());
|
|
14
|
+
return [
|
|
15
|
+
{
|
|
16
|
+
name: 'scheduler_create',
|
|
17
|
+
description: 'Create a scheduled agent task (cron-based, cross-platform)',
|
|
18
|
+
auth: 'write',
|
|
19
|
+
handler: async (params) => {
|
|
20
|
+
const name = String(params['name'] ?? '');
|
|
21
|
+
const cronExpression = String(params['cronExpression'] ?? '');
|
|
22
|
+
const prompt = String(params['prompt'] ?? '');
|
|
23
|
+
const projectPath = String(params['projectPath'] ?? process.cwd());
|
|
24
|
+
if (!name)
|
|
25
|
+
return { error: 'name is required' };
|
|
26
|
+
if (!cronExpression)
|
|
27
|
+
return { error: 'cronExpression is required' };
|
|
28
|
+
if (!prompt)
|
|
29
|
+
return { error: 'prompt is required' };
|
|
30
|
+
return scheduler.create({ name, cronExpression, prompt, projectPath });
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'scheduler_list',
|
|
35
|
+
description: 'List all Soleri-managed scheduled tasks with OS sync status',
|
|
36
|
+
auth: 'read',
|
|
37
|
+
handler: async () => {
|
|
38
|
+
const tasks = await scheduler.list();
|
|
39
|
+
return { tasks, count: tasks.length };
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'scheduler_delete',
|
|
44
|
+
description: 'Delete a scheduled task (removes from OS scheduler and DB)',
|
|
45
|
+
auth: 'write',
|
|
46
|
+
handler: async (params) => {
|
|
47
|
+
const id = String(params['id'] ?? '');
|
|
48
|
+
if (!id)
|
|
49
|
+
return { error: 'id is required' };
|
|
50
|
+
return scheduler.delete(id);
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'scheduler_pause',
|
|
55
|
+
description: 'Pause a scheduled task without deleting it',
|
|
56
|
+
auth: 'write',
|
|
57
|
+
handler: async (params) => {
|
|
58
|
+
const id = String(params['id'] ?? '');
|
|
59
|
+
if (!id)
|
|
60
|
+
return { error: 'id is required' };
|
|
61
|
+
return scheduler.pause(id);
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'scheduler_resume',
|
|
66
|
+
description: 'Resume a paused scheduled task',
|
|
67
|
+
auth: 'write',
|
|
68
|
+
handler: async (params) => {
|
|
69
|
+
const id = String(params['id'] ?? '');
|
|
70
|
+
if (!id)
|
|
71
|
+
return { error: 'id is required' };
|
|
72
|
+
return scheduler.resume(id);
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=scheduler-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-ops.js","sourceRoot":"","sources":["../../src/scheduler/scheduler-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform task scheduler for autonomous agent operations.
|
|
3
|
+
*
|
|
4
|
+
* Detects the OS and delegates to the appropriate platform adapter:
|
|
5
|
+
* - macOS: launchd (LaunchAgents)
|
|
6
|
+
* - Linux: systemd user timers
|
|
7
|
+
*
|
|
8
|
+
* Tasks are stored in SQLite (agent vault adjacent DB) and synced
|
|
9
|
+
* to the OS-level scheduler on create/delete/pause/resume.
|
|
10
|
+
*/
|
|
11
|
+
import type { PlatformAdapter, ScheduledTask, CreateTaskInput, TaskListEntry } from './types.js';
|
|
12
|
+
export declare const MAX_TASKS = 10;
|
|
13
|
+
export declare const MIN_INTERVAL_HOURS = 1;
|
|
14
|
+
/** Resolve the platform adapter for the current OS. Throws on unsupported OS. */
|
|
15
|
+
export declare function resolvePlatformAdapter(): Promise<PlatformAdapter>;
|
|
16
|
+
/**
|
|
17
|
+
* Scheduler — manages CRUD for scheduled tasks against a task store and
|
|
18
|
+
* the OS-level platform adapter.
|
|
19
|
+
*/
|
|
20
|
+
export declare class Scheduler {
|
|
21
|
+
private readonly adapterPromise;
|
|
22
|
+
private readonly store;
|
|
23
|
+
constructor(adapter?: PlatformAdapter, store?: SchedulerStore);
|
|
24
|
+
private getAdapter;
|
|
25
|
+
create(input: CreateTaskInput): Promise<ScheduledTask | {
|
|
26
|
+
error: string;
|
|
27
|
+
}>;
|
|
28
|
+
list(): Promise<TaskListEntry[]>;
|
|
29
|
+
delete(id: string): Promise<{
|
|
30
|
+
deleted: boolean;
|
|
31
|
+
error?: string;
|
|
32
|
+
}>;
|
|
33
|
+
pause(id: string): Promise<{
|
|
34
|
+
paused: boolean;
|
|
35
|
+
error?: string;
|
|
36
|
+
}>;
|
|
37
|
+
resume(id: string): Promise<{
|
|
38
|
+
resumed: boolean;
|
|
39
|
+
error?: string;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
export interface SchedulerStore {
|
|
43
|
+
list(): Promise<ScheduledTask[]>;
|
|
44
|
+
get(id: string): Promise<ScheduledTask | null>;
|
|
45
|
+
save(task: ScheduledTask): Promise<void>;
|
|
46
|
+
delete(id: string): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
export declare class InMemorySchedulerStore implements SchedulerStore {
|
|
49
|
+
private readonly tasks;
|
|
50
|
+
list(): Promise<ScheduledTask[]>;
|
|
51
|
+
get(id: string): Promise<ScheduledTask | null>;
|
|
52
|
+
save(task: ScheduledTask): Promise<void>;
|
|
53
|
+
delete(id: string): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/scheduler/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGjG,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,iFAAiF;AACjF,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,eAAe,CAAC,CAWvE;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;gBAE3B,OAAO,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc;YAK/C,UAAU;IAIlB,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAwC1E,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAchC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAgBjE,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAY/D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAWxE;AAMD,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAEpD,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAIhC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAI9C,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform task scheduler for autonomous agent operations.
|
|
3
|
+
*
|
|
4
|
+
* Detects the OS and delegates to the appropriate platform adapter:
|
|
5
|
+
* - macOS: launchd (LaunchAgents)
|
|
6
|
+
* - Linux: systemd user timers
|
|
7
|
+
*
|
|
8
|
+
* Tasks are stored in SQLite (agent vault adjacent DB) and synced
|
|
9
|
+
* to the OS-level scheduler on create/delete/pause/resume.
|
|
10
|
+
*/
|
|
11
|
+
import { platform } from 'node:os';
|
|
12
|
+
import { validateCron, estimateMinIntervalHours } from './cron-validator.js';
|
|
13
|
+
export const MAX_TASKS = 10;
|
|
14
|
+
export const MIN_INTERVAL_HOURS = 1;
|
|
15
|
+
/** Resolve the platform adapter for the current OS. Throws on unsupported OS. */
|
|
16
|
+
export async function resolvePlatformAdapter() {
|
|
17
|
+
const os = platform();
|
|
18
|
+
if (os === 'darwin') {
|
|
19
|
+
const { MacOSAdapter } = await import('./platform-macos.js');
|
|
20
|
+
return new MacOSAdapter();
|
|
21
|
+
}
|
|
22
|
+
if (os === 'linux') {
|
|
23
|
+
const { LinuxAdapter } = await import('./platform-linux.js');
|
|
24
|
+
return new LinuxAdapter();
|
|
25
|
+
}
|
|
26
|
+
throw new Error(`Unsupported OS for task scheduler: ${os}. Supported: darwin, linux.`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Scheduler — manages CRUD for scheduled tasks against a task store and
|
|
30
|
+
* the OS-level platform adapter.
|
|
31
|
+
*/
|
|
32
|
+
export class Scheduler {
|
|
33
|
+
adapterPromise;
|
|
34
|
+
store;
|
|
35
|
+
constructor(adapter, store) {
|
|
36
|
+
this.adapterPromise = adapter ? Promise.resolve(adapter) : resolvePlatformAdapter();
|
|
37
|
+
this.store = store ?? new InMemorySchedulerStore();
|
|
38
|
+
}
|
|
39
|
+
async getAdapter() {
|
|
40
|
+
return this.adapterPromise;
|
|
41
|
+
}
|
|
42
|
+
async create(input) {
|
|
43
|
+
// Validate cron
|
|
44
|
+
const cronError = validateCron(input.cronExpression);
|
|
45
|
+
if (cronError)
|
|
46
|
+
return { error: cronError };
|
|
47
|
+
// Enforce minimum interval
|
|
48
|
+
const intervalHours = estimateMinIntervalHours(input.cronExpression);
|
|
49
|
+
if (intervalHours < MIN_INTERVAL_HOURS) {
|
|
50
|
+
return { error: `Minimum scheduling interval is ${MIN_INTERVAL_HOURS} hour(s)` };
|
|
51
|
+
}
|
|
52
|
+
// Enforce max tasks limit
|
|
53
|
+
const existing = await this.store.list();
|
|
54
|
+
if (existing.length >= MAX_TASKS) {
|
|
55
|
+
return { error: `Maximum ${MAX_TASKS} scheduled tasks per agent` };
|
|
56
|
+
}
|
|
57
|
+
// Check for duplicate name
|
|
58
|
+
if (existing.some((t) => t.name === input.name)) {
|
|
59
|
+
return { error: `Task "${input.name}" already exists` };
|
|
60
|
+
}
|
|
61
|
+
const task = {
|
|
62
|
+
id: `sched-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
63
|
+
name: input.name,
|
|
64
|
+
cronExpression: input.cronExpression,
|
|
65
|
+
prompt: input.prompt,
|
|
66
|
+
projectPath: input.projectPath,
|
|
67
|
+
enabled: true,
|
|
68
|
+
createdAt: new Date().toISOString(),
|
|
69
|
+
};
|
|
70
|
+
// Create OS-level task
|
|
71
|
+
const platformId = await (await this.getAdapter()).create(task);
|
|
72
|
+
task.platformId = platformId;
|
|
73
|
+
await this.store.save(task);
|
|
74
|
+
return task;
|
|
75
|
+
}
|
|
76
|
+
async list() {
|
|
77
|
+
const tasks = await this.store.list();
|
|
78
|
+
const entries = [];
|
|
79
|
+
for (const task of tasks) {
|
|
80
|
+
const platformSynced = task.platformId
|
|
81
|
+
? await (await this.getAdapter()).exists(task.platformId)
|
|
82
|
+
: false;
|
|
83
|
+
entries.push({ ...task, platformSynced });
|
|
84
|
+
}
|
|
85
|
+
return entries;
|
|
86
|
+
}
|
|
87
|
+
async delete(id) {
|
|
88
|
+
const task = await this.store.get(id);
|
|
89
|
+
if (!task)
|
|
90
|
+
return { deleted: false, error: `Task "${id}" not found` };
|
|
91
|
+
if (task.platformId) {
|
|
92
|
+
try {
|
|
93
|
+
await (await this.getAdapter()).remove(task.platformId);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Best-effort — remove from DB even if OS cleanup fails
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
await this.store.delete(id);
|
|
100
|
+
return { deleted: true };
|
|
101
|
+
}
|
|
102
|
+
async pause(id) {
|
|
103
|
+
const task = await this.store.get(id);
|
|
104
|
+
if (!task)
|
|
105
|
+
return { paused: false, error: `Task "${id}" not found` };
|
|
106
|
+
if (!task.enabled)
|
|
107
|
+
return { paused: false, error: 'Task is already paused' };
|
|
108
|
+
if (!task.platformId)
|
|
109
|
+
return { paused: false, error: 'Task has no platform ID' };
|
|
110
|
+
await (await this.getAdapter()).pause(task.platformId);
|
|
111
|
+
task.enabled = false;
|
|
112
|
+
await this.store.save(task);
|
|
113
|
+
return { paused: true };
|
|
114
|
+
}
|
|
115
|
+
async resume(id) {
|
|
116
|
+
const task = await this.store.get(id);
|
|
117
|
+
if (!task)
|
|
118
|
+
return { resumed: false, error: `Task "${id}" not found` };
|
|
119
|
+
if (task.enabled)
|
|
120
|
+
return { resumed: false, error: 'Task is already running' };
|
|
121
|
+
if (!task.platformId)
|
|
122
|
+
return { resumed: false, error: 'Task has no platform ID' };
|
|
123
|
+
await (await this.getAdapter()).resume(task.platformId);
|
|
124
|
+
task.enabled = true;
|
|
125
|
+
await this.store.save(task);
|
|
126
|
+
return { resumed: true };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export class InMemorySchedulerStore {
|
|
130
|
+
tasks = new Map();
|
|
131
|
+
async list() {
|
|
132
|
+
return [...this.tasks.values()];
|
|
133
|
+
}
|
|
134
|
+
async get(id) {
|
|
135
|
+
return this.tasks.get(id) ?? null;
|
|
136
|
+
}
|
|
137
|
+
async save(task) {
|
|
138
|
+
this.tasks.set(task.id, { ...task });
|
|
139
|
+
}
|
|
140
|
+
async delete(id) {
|
|
141
|
+
this.tasks.delete(id);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/scheduler/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform task scheduler types.
|
|
3
|
+
* Enables Soleri agents to schedule autonomous background operations.
|
|
4
|
+
*/
|
|
5
|
+
export interface ScheduledTask {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
/** Standard cron expression (minute hour day month weekday). Minimum interval: 1 hour. */
|
|
9
|
+
cronExpression: string;
|
|
10
|
+
/** Prompt passed to `claude -p` when the task fires */
|
|
11
|
+
prompt: string;
|
|
12
|
+
/** Absolute path to the agent project directory */
|
|
13
|
+
projectPath: string;
|
|
14
|
+
/** OS-specific task identifier (plist label, systemd unit name, etc.) */
|
|
15
|
+
platformId?: string;
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
lastRunAt?: string;
|
|
18
|
+
lastExitCode?: number;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
}
|
|
21
|
+
export interface CreateTaskInput {
|
|
22
|
+
name: string;
|
|
23
|
+
cronExpression: string;
|
|
24
|
+
prompt: string;
|
|
25
|
+
projectPath: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TaskListEntry extends ScheduledTask {
|
|
28
|
+
/** Whether the OS-level task exists and matches the DB record */
|
|
29
|
+
platformSynced: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface SchedulerResult {
|
|
32
|
+
success: boolean;
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Platform adapter interface — each OS implements this. */
|
|
36
|
+
export interface PlatformAdapter {
|
|
37
|
+
/** Create or update the OS-level scheduled task. Returns the platform ID. */
|
|
38
|
+
create(task: ScheduledTask): Promise<string>;
|
|
39
|
+
/** Remove the OS-level scheduled task. */
|
|
40
|
+
remove(platformId: string): Promise<void>;
|
|
41
|
+
/** Check if the OS-level task exists. */
|
|
42
|
+
exists(platformId: string): Promise<boolean>;
|
|
43
|
+
/** Pause (disable) the OS-level scheduled task. */
|
|
44
|
+
pause(platformId: string): Promise<void>;
|
|
45
|
+
/** Resume (enable) the OS-level scheduled task. */
|
|
46
|
+
resume(platformId: string): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scheduler/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,cAAc,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,iEAAiE;IACjE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,0CAA0C;IAC1C,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,yCAAyC;IACzC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,mDAAmD;IACnD,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,mDAAmD;IACnD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scheduler/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -54,6 +54,17 @@ export declare function discoverSkills(skillsDirs: string[]): SkillEntry[];
|
|
|
54
54
|
* the global `~/.claude/skills/` directory to eliminate duplication.
|
|
55
55
|
*/
|
|
56
56
|
export declare function syncSkillsToClaudeCode(skillsDirs: string[], agentName?: string, options?: SyncOptions): SyncResult;
|
|
57
|
+
/**
|
|
58
|
+
* Create or update ~/.claude/CLAUDE.md to include a routing section for the
|
|
59
|
+
* given agent. Idempotent — replaces the agent's existing section if present,
|
|
60
|
+
* appends otherwise. Does not touch other agents' sections.
|
|
61
|
+
*/
|
|
62
|
+
export declare function scaffoldGlobalClaudeMd(agentId: string, displayName: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Remove an agent's section from ~/.claude/CLAUDE.md.
|
|
65
|
+
* No-op if the file or section doesn't exist.
|
|
66
|
+
*/
|
|
67
|
+
export declare function removeAgentFromGlobalClaudeMd(agentId: string): void;
|
|
57
68
|
/**
|
|
58
69
|
* Check engine version compatibility for a skill.
|
|
59
70
|
* Returns 'compatible', 'unknown' (no version specified), or 'invalid'.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-skills.d.ts","sourceRoot":"","sources":["../../src/skills/sync-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAC;AAInE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6EAA6E;AAC7E,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;gBAEnC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC;CAarE;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-skills.d.ts","sourceRoot":"","sources":["../../src/skills/sync-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAC;AAInE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6EAA6E;AAC7E,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;gBAEnC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC;CAarE;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CA2BjE;AAoBD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,WAAgB,GACxB,UAAU,CAyIZ;AAiCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAgEjF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAkBnE;AAMD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,YAAY,GAAG,SAAS,GAAG,SAAS,CAItC;AA+BD,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,qBAA0B,GAClC,UAAU,EAAE,CAwBd"}
|