devworkspace 0.1.0 → 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/CHANGELOG.md +28 -0
- package/README.md +16 -2
- package/dist/agents/claude/adapter.d.ts +5 -0
- package/dist/agents/claude/adapter.js +10 -0
- package/dist/agents/claude/adapter.js.map +1 -1
- package/dist/agents/claude/content.js +3 -3
- package/dist/agents/claude/content.js.map +1 -1
- package/dist/cli/args.d.ts +22 -0
- package/dist/cli/args.js +7 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/help.js +54 -7
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/render.d.ts +9 -0
- package/dist/cli/render.js +105 -13
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/run.d.ts +6 -0
- package/dist/cli/run.js +75 -3
- package/dist/cli/run.js.map +1 -1
- package/dist/core/workspace.js +2 -1
- package/dist/core/workspace.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapters/agent-skills.d.ts +8 -0
- package/dist/integrations/adapters/agent-skills.js +25 -0
- package/dist/integrations/adapters/agent-skills.js.map +1 -0
- package/dist/integrations/adapters/claudePlugin.d.ts +41 -0
- package/dist/integrations/adapters/claudePlugin.js +129 -0
- package/dist/integrations/adapters/claudePlugin.js.map +1 -0
- package/dist/integrations/adapters/graphify.d.ts +2 -0
- package/dist/integrations/adapters/graphify.js +239 -0
- package/dist/integrations/adapters/graphify.js.map +1 -0
- package/dist/integrations/adapters/omniroute.d.ts +6 -0
- package/dist/integrations/adapters/omniroute.js +32 -0
- package/dist/integrations/adapters/omniroute.js.map +1 -0
- package/dist/integrations/adapters/pluginSkill.d.ts +28 -0
- package/dist/integrations/adapters/pluginSkill.js +195 -0
- package/dist/integrations/adapters/pluginSkill.js.map +1 -0
- package/dist/integrations/adapters/ponytail.d.ts +8 -0
- package/dist/integrations/adapters/ponytail.js +33 -0
- package/dist/integrations/adapters/ponytail.js.map +1 -0
- package/dist/integrations/exec.d.ts +26 -0
- package/dist/integrations/exec.js +167 -0
- package/dist/integrations/exec.js.map +1 -0
- package/dist/integrations/index.d.ts +5 -6
- package/dist/integrations/index.js +3 -29
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/manager.d.ts +62 -0
- package/dist/integrations/manager.js +248 -0
- package/dist/integrations/manager.js.map +1 -0
- package/dist/integrations/notices.d.ts +13 -0
- package/dist/integrations/notices.js +68 -0
- package/dist/integrations/notices.js.map +1 -0
- package/dist/integrations/protect.d.ts +20 -0
- package/dist/integrations/protect.js +131 -0
- package/dist/integrations/protect.js.map +1 -0
- package/dist/integrations/state.d.ts +10 -0
- package/dist/integrations/state.js +81 -0
- package/dist/integrations/state.js.map +1 -0
- package/dist/integrations/types.d.ts +133 -16
- package/dist/integrations/types.js +13 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/prompts/onboarding.d.ts +3 -3
- package/dist/prompts/onboarding.js +5 -4
- package/dist/prompts/onboarding.js.map +1 -1
- package/dist/services/analysis.d.ts +2 -2
- package/dist/services/analysis.js +4 -5
- package/dist/services/analysis.js.map +1 -1
- package/dist/services/common.d.ts +8 -5
- package/dist/services/common.js +2 -5
- package/dist/services/common.js.map +1 -1
- package/dist/services/doctor.d.ts +10 -0
- package/dist/services/doctor.js +9 -15
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/init.d.ts +9 -2
- package/dist/services/init.js +10 -7
- package/dist/services/init.js.map +1 -1
- package/dist/services/integrations.d.ts +26 -0
- package/dist/services/integrations.js +35 -0
- package/dist/services/integrations.js.map +1 -0
- package/dist/services/reset.d.ts +23 -0
- package/dist/services/reset.js +96 -0
- package/dist/services/reset.js.map +1 -0
- package/dist/services/status.d.ts +3 -2
- package/dist/services/status.js +3 -3
- package/dist/services/status.js.map +1 -1
- package/dist/utils/lock.d.ts +2 -0
- package/dist/utils/lock.js +2 -2
- package/dist/utils/lock.js.map +1 -1
- package/dist/utils/proc.d.ts +8 -1
- package/dist/utils/proc.js +31 -8
- package/dist/utils/proc.js.map +1 -1
- package/docs/architecture.md +1 -1
- package/docs/claude.md +4 -0
- package/docs/getting-started.md +13 -2
- package/docs/integrations.md +98 -33
- package/docs/security.md +5 -1
- package/docs/testing.md +2 -0
- package/docs/troubleshooting.md +9 -1
- package/package.json +1 -1
- package/dist/integrations/agent-skills.d.ts +0 -10
- package/dist/integrations/agent-skills.js +0 -45
- package/dist/integrations/agent-skills.js.map +0 -1
- package/dist/integrations/graphify.d.ts +0 -7
- package/dist/integrations/graphify.js +0 -54
- package/dist/integrations/graphify.js.map +0 -1
- package/dist/integrations/omniroute.d.ts +0 -7
- package/dist/integrations/omniroute.js +0 -24
- package/dist/integrations/omniroute.js.map +0 -1
- package/dist/integrations/ponytail.d.ts +0 -10
- package/dist/integrations/ponytail.js +0 -58
- package/dist/integrations/ponytail.js.map +0 -1
- package/dist/integrations/probe.d.ts +0 -6
- package/dist/integrations/probe.js +0 -41
- package/dist/integrations/probe.js.map +0 -1
package/dist/cli/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { DevWorkspaceError, EXIT, formatError, isDevWorkspaceError } from '../errors/index.js';\nimport { packageVersion } from '../core/version.js';\nimport { createLogger } from '../utils/logger.js';\nimport { bool, int, list, parseCli, str, type ParsedArgs } from './args.js';\nimport { COMMANDS, commandHelp, topHelp } from './help.js';\nimport {\n makeStyle,\n renderAgentInstall,\n renderAnalyze,\n renderContext,\n renderDoctor,\n renderExport,\n renderImport,\n renderInit,\n renderMigrate,\n renderRefresh,\n renderStatus,\n renderTask,\n type Style,\n} from './render.js';\nimport { requireWorkspace } from '../core/workspace.js';\nimport { analyzeWorkspace } from '../services/analysis.js';\nimport { installAgent } from '../services/agent.js';\nimport { mutate, type ServiceOptions } from '../services/common.js';\nimport { runDoctor } from '../services/doctor.js';\nimport { initWorkspace } from '../services/init.js';\nimport { addFact, getContext, removeFactByKey, verifyFactByKey } from '../services/knowledge.js';\nimport { migrateWorkspace } from '../services/migrate.js';\nimport { exportWorkspace, importWorkspace } from '../services/portability.js';\nimport { getDecision, getDecisions, getSessions, recordDecision, recordSession } from '../services/records.js';\nimport { refreshWorkspace } from '../services/refresh.js';\nimport { getStatus } from '../services/status.js';\nimport {\n attestTask,\n createTask,\n listTasksService,\n recordTests,\n recordVerification,\n setTaskStatus,\n showTask,\n updateTask,\n} from '../services/tasks.js';\nimport { CONFIDENCE, FACT_STATUS, SOURCE_TYPES, type Confidence, type FactStatus, type SourceType } from '../config/schemas.js';\nimport { loadFacts } from '../knowledge/facts.js';\n\nexport interface CliIO {\n stdout: (s: string) => void;\n stderr: (s: string) => void;\n cwd: string;\n env: NodeJS.ProcessEnv;\n isTTY: boolean;\n}\n\nexport function defaultIO(): CliIO {\n return {\n stdout: (s) => process.stdout.write(s),\n stderr: (s) => process.stderr.write(s),\n cwd: process.cwd(),\n env: process.env,\n isTTY: !!process.stdout.isTTY,\n };\n}\n\ninterface Ctx {\n args: ParsedArgs;\n rest: string[];\n svc: ServiceOptions;\n json: boolean;\n style: Style;\n out(text: string): void;\n data(value: unknown, text: string): void;\n exit: number;\n}\n\nfunction need(v: string | undefined, flag: string): string {\n if (!v) throw new DevWorkspaceError('USAGE', `Missing required option --${flag}.`, { hint: 'Run \"devworkspace <command> --help\".' });\n return v;\n}\n\nfunction oneOf<T extends string>(v: string | undefined, allowed: readonly T[], flag: string, fallback?: T): T {\n const x = v ?? fallback;\n if (x === undefined || !(allowed as readonly string[]).includes(x)) {\n throw new DevWorkspaceError('USAGE', `--${flag} must be one of: ${allowed.join(', ')}.`);\n }\n return x as T;\n}\n\ntype Handler = (c: Ctx) => Promise<void>;\n\nconst handlers: Record<string, Handler> = {\n async init(c) {\n const r = await initWorkspace({ ...c.svc, root: str(c.args.values, 'root') });\n c.data(r, renderInit(c.style, r));\n },\n async analyze(c) {\n const ws = await requireWorkspace(c.svc.cwd);\n const r = c.svc.dryRun ? await analyzeWorkspace(ws, c.svc) : await mutate(c.svc, (w) => analyzeWorkspace(w, c.svc));\n c.data(r, renderAnalyze(c.style, r));\n },\n async status(c) {\n const r = await getStatus(c.svc);\n c.data(r, renderStatus(c.style, r));\n if (!r.initialized || r.workspace === 'Unreadable') c.exit = EXIT.FAILURE;\n else if (bool(c.args.values, 'strict') && (r.workspace !== 'Healthy' || r.knowledge.stale > 0 || !r.onboarding.ready)) c.exit = EXIT.WARNINGS;\n },\n async doctor(c) {\n const r = await runDoctor({ ...c.svc, fix: bool(c.args.values, 'fix') });\n c.data(r, renderDoctor(c.style, r));\n if (!r.healthy) c.exit = EXIT.FAILURE;\n else if (bool(c.args.values, 'strict') && r.counts.warn > 0) c.exit = EXIT.WARNINGS;\n },\n async refresh(c) {\n const r = await refreshWorkspace(c.svc);\n c.data(r, renderRefresh(c.style, r));\n },\n async context(c) {\n const r = await getContext(c.svc, { topic: str(c.args.values, 'topic'), full: bool(c.args.values, 'full') });\n c.data(r, renderContext(c.style, r));\n },\n async fact(c) {\n const sub = c.rest[0];\n const v = c.args.values;\n if (sub === 'add') {\n const sourceType = oneOf<SourceType>(str(v, 'source-type'), SOURCE_TYPES, 'source-type', 'ai');\n const input = {\n key: need(str(v, 'key'), 'key'),\n value: need(str(v, 'value'), 'value'),\n source: need(str(v, 'source'), 'source'),\n sourceType,\n sources: list(v, 'file'),\n confidence: oneOf<Confidence>(str(v, 'confidence')?.toUpperCase(), CONFIDENCE, 'confidence', 'MEDIUM'),\n status: str(v, 'status') ? oneOf<FactStatus>(str(v, 'status')!.toUpperCase(), FACT_STATUS, 'status') : undefined,\n };\n const r = await addFact(c.svc, input);\n c.data(r, `${c.style.ok(c.style.sym.ok)} Fact ${r.action}: ${r.fact.key} [${r.fact.status}/${r.fact.confidence}]`);\n } else if (sub === 'verify') {\n const f = await verifyFactByKey(c.svc, need(c.rest[1], 'key (positional)'));\n c.data(f, `${c.style.ok(c.style.sym.ok)} Verified ${f.key} [${f.status}]`);\n } else if (sub === 'remove') {\n const key = need(c.rest[1], 'key (positional)');\n const removed = await removeFactByKey(c.svc, key);\n if (!removed) throw new DevWorkspaceError('NOT_FOUND', `No fact with key \"${key}\".`);\n c.data({ removed: key }, `${c.style.ok(c.style.sym.ok)} Removed ${key}`);\n } else if (sub === 'list' || sub === undefined) {\n const ws = await requireWorkspace(c.svc.cwd);\n const facts = (await loadFacts(ws)).facts;\n c.data(facts, facts.length ? facts.map((f) => `${f.key} [${f.status}] ${f.value}`).join('\\n') : 'No facts recorded yet.');\n } else throw new DevWorkspaceError('USAGE', `Unknown fact subcommand \"${sub}\".`, { hint: 'Use: add, verify, remove, list.' });\n },\n async task(c) {\n const v = c.args.values;\n let sub = c.rest[0];\n const known = ['new', 'list', 'show', 'status', 'update', 'verify', 'tests', 'attest'];\n // `devworkspace task \"<description>\"` is shorthand for `task new`.\n if (sub !== undefined && !known.includes(sub)) {\n c.rest.unshift('new');\n sub = 'new';\n }\n const id = c.rest[1];\n switch (sub) {\n case 'new': {\n const text = c.rest.slice(1).join(' ').trim();\n if (!text) throw new DevWorkspaceError('USAGE', 'Describe the task: devworkspace task new \"<request>\"');\n const r = await createTask(c.svc, { text, type: str(v, 'type'), title: str(v, 'title') });\n const checks = r.task.verification.map((x) => `${x.check}${x.status === 'SKIPPED' ? ' (skipped: user override)' : ''}`).join(', ') || 'none';\n c.data(r, [\n `${c.style.ok(c.style.sym.ok)} Created ${r.task.id}`,\n ` type: ${r.task.type} (${r.classification.confidence === 'high' ? 'classified' : 'low confidence - confirm with the user'})${r.classification.readOnly ? ' - read-only request' : ''}`,\n ` required verification: ${checks}`,\n ` workflow: ${r.workflow.steps[0]}`,\n ].join('\\n'));\n break;\n }\n case 'list': {\n const { tasks, corrupt } = await listTasksService(c.svc, bool(v, 'all'));\n const text = tasks.length ? tasks.map((t) => `${t.id} ${t.status.padEnd(11)} ${t.type.padEnd(13)} ${t.title}`).join('\\n') : 'No tasks.';\n c.data({ tasks, corrupt }, text + (corrupt.length ? `\\n${c.style.sym.warn} ${corrupt.length} unreadable task file(s); run: devworkspace doctor` : ''));\n break;\n }\n case 'show': {\n const r = await showTask(c.svc, need(id, 'id (positional)'));\n c.data(r, renderTask(c.style, r.task, r.gate));\n break;\n }\n case 'status': {\n const r = await setTaskStatus(c.svc, need(id, 'id (positional)'), need(c.rest[2], 'status (positional)'), str(v, 'note'));\n const warn = r.gate?.warnings.map((w) => `\\n ${c.style.sym.warn} ${w}`).join('') ?? '';\n c.data(r, `${c.style.ok(c.style.sym.ok)} ${r.task.id} is now ${r.task.status}${warn}`);\n break;\n }\n case 'update': {\n const t = await updateTask(c.svc, need(id, 'id (positional)'), {\n title: str(v, 'title'),\n summary: str(v, 'summary'),\n criteria: list(v, 'criteria'),\n plan: list(v, 'plan'),\n areas: list(v, 'area'),\n decisions: list(v, 'decision-note'),\n blockers: list(v, 'blocker'),\n clearBlockers: bool(v, 'clear-blockers'),\n require: list(v, 'require'),\n });\n c.data(t, renderTask(c.style, t));\n break;\n }\n case 'verify': {\n const t = await recordVerification(c.svc, need(id, 'id (positional)'), need(c.rest[2], 'check (positional)'), need(c.rest[3], 'result (positional: pass|fail|skip|pending)'), {\n reason: str(v, 'reason'),\n detail: str(v, 'detail'),\n });\n c.data(t, renderTask(c.style, t));\n break;\n }\n case 'tests': {\n const phase = oneOf(str(v, 'phase'), ['baseline', 'after'] as const, 'phase');\n const t = await recordTests(c.svc, need(id, 'id (positional)'), phase, int(v, 'passed') ?? NaN, int(v, 'failed') ?? NaN);\n c.data(t, renderTask(c.style, t));\n break;\n }\n case 'attest': {\n const t = await attestTask(c.svc, need(id, 'id (positional)'), {\n userWorkIntact: bool(v, 'user-work-intact') || undefined,\n knowledgeReviewed: bool(v, 'knowledge-reviewed') || undefined,\n finalStateInspected: bool(v, 'final-state-inspected') || undefined,\n });\n c.data(t, renderTask(c.style, t));\n break;\n }\n default:\n throw new DevWorkspaceError('USAGE', 'Missing task subcommand.', { hint: 'Run \"devworkspace task --help\".' });\n }\n },\n async decision(c) {\n const v = c.args.values;\n const sub = c.rest[0] ?? 'list';\n if (sub === 'add') {\n const d = await recordDecision(c.svc, {\n title: need(str(v, 'title'), 'title'),\n context: need(str(v, 'context'), 'context'),\n decision: need(str(v, 'decision'), 'decision'),\n consequences: need(str(v, 'consequences'), 'consequences'),\n supersedes: int(v, 'supersedes'),\n });\n c.data(d, `${c.style.ok(c.style.sym.ok)} Recorded decision ${String(d.number).padStart(4, '0')}: ${d.title}`);\n } else if (sub === 'list') {\n const ds = await getDecisions(c.svc);\n c.data(ds, ds.length ? ds.map((d) => `${String(d.number).padStart(4, '0')} [${d.status}] ${d.date} ${d.title}`).join('\\n') : 'No decisions recorded.');\n } else if (sub === 'show') {\n const d = await getDecision(c.svc, Number(need(c.rest[1], 'number (positional)')));\n c.data(d, `# ${d.number}. ${d.title} [${d.status}] ${d.date}\\n\\nContext:\\n${d.context}\\n\\nDecision:\\n${d.decision}\\n\\nConsequences:\\n${d.consequences}`);\n } else throw new DevWorkspaceError('USAGE', `Unknown decision subcommand \"${sub}\".`, { hint: 'Use: add, list, show.' });\n },\n async session(c) {\n const v = c.args.values;\n const sub = c.rest[0] ?? 'list';\n if (sub === 'save') {\n const s = await recordSession(c.svc, {\n goal: need(str(v, 'goal'), 'goal'),\n completed: list(v, 'done'),\n areas: list(v, 'area'),\n testsRun: list(v, 'tests-run'),\n decisions: list(v, 'decision-note'),\n remaining: list(v, 'remaining'),\n next: str(v, 'next') ?? '',\n taskId: str(v, 'task'),\n });\n c.data(s, `${c.style.ok(c.style.sym.ok)} Saved session ${s.id}`);\n } else if (sub === 'list') {\n const ss = await getSessions(c.svc, int(v, 'limit') ?? 10);\n c.data(ss, ss.length ? ss.map((s) => `${s.id} ${s.goal} ${c.style.sym.arrow} ${s.next || '(no next step)'}`).join('\\n') : 'No sessions saved.');\n } else throw new DevWorkspaceError('USAGE', `Unknown session subcommand \"${sub}\".`, { hint: 'Use: save, list.' });\n },\n async agent(c) {\n if (c.rest[0] !== 'install') throw new DevWorkspaceError('USAGE', 'Usage: devworkspace agent install [--agent claude]');\n const r = await installAgent(c.svc, str(c.args.values, 'agent') ?? 'claude');\n c.data(r, renderAgentInstall(c.style, r));\n },\n async export(c) {\n const r = await exportWorkspace(c.svc, str(c.args.values, 'out'));\n c.data(r, renderExport(c.style, r));\n },\n async import(c) {\n const file = need(c.rest[0], 'file (positional)');\n const r = await importWorkspace({ ...c.svc, overwrite: bool(c.args.values, 'overwrite'), allowDifferentProject: bool(c.args.values, 'allow-different-project') }, file);\n c.data(r, renderImport(c.style, r));\n },\n async migrate(c) {\n const r = await migrateWorkspace(c.svc);\n c.data(r, renderMigrate(c.style, r));\n },\n};\n\nconst ALIASES: Record<string, string> = { tasks: 'task' };\n\n/** Run the CLI and return the process exit code. Never calls process.exit, so it is directly testable. */\nexport async function run(argv: string[], io: CliIO = defaultIO()): Promise<number> {\n let debug = argv.includes('--debug');\n let json = argv.includes('--json');\n try {\n const args = parseCli(argv);\n const v = args.values;\n debug = bool(v, 'debug');\n json = bool(v, 'json');\n const color = io.isTTY && !io.env.NO_COLOR && !bool(v, 'no-color') && io.env.TERM !== 'dumb';\n const ascii = bool(v, 'ascii') || !!io.env.DEVWORKSPACE_ASCII;\n const style = makeStyle({ color, ascii });\n const logger = createLogger(debug ? 'debug' : 'warn', (l) => io.stderr(l + '\\n'));\n\n if (bool(v, 'version') || args.positionals[0] === 'version') {\n io.stdout(packageVersion() + '\\n');\n return EXIT.OK;\n }\n const [rawCmd, ...rest] = args.positionals;\n const cmd = rawCmd ? (ALIASES[rawCmd] ?? rawCmd) : undefined;\n if (rawCmd === 'tasks') rest.unshift('list');\n if (!cmd || cmd === 'help') {\n const target = cmd === 'help' ? COMMANDS.find((c) => c.name === rest[0]) : undefined;\n io.stdout((target ? commandHelp(target) : topHelp(packageVersion())) + '\\n');\n return EXIT.OK;\n }\n const help = COMMANDS.find((c) => c.name === cmd);\n const handler = handlers[cmd];\n if (!help || !handler) {\n throw new DevWorkspaceError('USAGE', `Unknown command \"${rawCmd}\".`, { hint: 'Run \"devworkspace --help\" to see available commands.' });\n }\n if (bool(v, 'help')) {\n io.stdout(commandHelp(help) + '\\n');\n return EXIT.OK;\n }\n\n const cwd = path.resolve(io.cwd, str(v, 'cwd') ?? '.');\n const ctx: Ctx = {\n args,\n rest,\n svc: { cwd, dryRun: bool(v, 'dry-run'), env: io.env, ...(io.env.DEVWORKSPACE_HOME ? { homeDir: io.env.DEVWORKSPACE_HOME } : {}) },\n json,\n style,\n exit: EXIT.OK,\n out: (t) => io.stdout(t + '\\n'),\n data: (value, text) => io.stdout((json ? JSON.stringify(value, null, 2) : text) + '\\n'),\n };\n logger.debug(`command=${cmd} cwd=${cwd}`);\n await handler(ctx);\n return ctx.exit;\n } catch (e) {\n if (json) {\n const err = isDevWorkspaceError(e)\n ? { code: e.code, message: e.message, hint: e.hint ?? null, stateChanged: e.stateChanged }\n : { code: 'INTERNAL', message: e instanceof Error ? e.message : String(e), hint: null, stateChanged: false };\n io.stdout(JSON.stringify({ error: err }, null, 2) + '\\n');\n } else {\n io.stderr(formatError(e, debug) + '\\n');\n }\n return isDevWorkspaceError(e) ? e.exitCode : EXIT.FAILURE;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { DevWorkspaceError, EXIT, formatError, isDevWorkspaceError } from '../errors/index.js';\nimport { packageVersion } from '../core/version.js';\nimport { createLogger } from '../utils/logger.js';\nimport { bool, int, list, parseCli, str, type ParsedArgs } from './args.js';\nimport { COMMANDS, commandHelp, topHelp } from './help.js';\nimport {\n makeStyle,\n renderAgentInstall,\n renderAnalyze,\n renderContext,\n renderDoctor,\n renderExport,\n renderImport,\n renderInit,\n renderIntegrationsStatus,\n renderSetup,\n renderMigrate,\n renderRefresh,\n renderReset,\n renderStatus,\n renderTask,\n type Style,\n} from './render.js';\nimport { requireWorkspace } from '../core/workspace.js';\nimport { analyzeWorkspace } from '../services/analysis.js';\nimport { installAgent } from '../services/agent.js';\nimport { mutate, type ServiceOptions } from '../services/common.js';\nimport { runDoctor } from '../services/doctor.js';\nimport { initWorkspace } from '../services/init.js';\nimport { integrationsStatus, setupIntegrations } from '../services/integrations.js';\nimport type { SetupResult } from '../integrations/manager.js';\nimport type { InstallScope, Runner } from '../integrations/types.js';\nimport { addFact, getContext, removeFactByKey, verifyFactByKey } from '../services/knowledge.js';\nimport { migrateWorkspace } from '../services/migrate.js';\nimport { exportWorkspace, importWorkspace } from '../services/portability.js';\nimport { getDecision, getDecisions, getSessions, recordDecision, recordSession } from '../services/records.js';\nimport { refreshWorkspace } from '../services/refresh.js';\nimport { resetWorkspace } from '../services/reset.js';\nimport { getStatus } from '../services/status.js';\nimport {\n attestTask,\n createTask,\n listTasksService,\n recordTests,\n recordVerification,\n setTaskStatus,\n showTask,\n updateTask,\n} from '../services/tasks.js';\nimport { CONFIDENCE, FACT_STATUS, SOURCE_TYPES, type Confidence, type FactStatus, type SourceType } from '../config/schemas.js';\nimport { loadFacts } from '../knowledge/facts.js';\n\nexport interface CliIO {\n stdout: (s: string) => void;\n stderr: (s: string) => void;\n cwd: string;\n env: NodeJS.ProcessEnv;\n isTTY: boolean;\n /** Process runner used by the integration manager (tests inject a fake; the default runs real processes). */\n runner?: Runner;\n}\n\nexport function defaultIO(): CliIO {\n return {\n stdout: (s) => process.stdout.write(s),\n stderr: (s) => process.stderr.write(s),\n cwd: process.cwd(),\n env: process.env,\n isTTY: !!process.stdout.isTTY,\n };\n}\n\ninterface Ctx {\n args: ParsedArgs;\n rest: string[];\n svc: ServiceOptions;\n json: boolean;\n style: Style;\n out(text: string): void;\n err(text: string): void;\n data(value: unknown, text: string): void;\n exit: number;\n}\n\nfunction need(v: string | undefined, flag: string): string {\n if (!v) throw new DevWorkspaceError('USAGE', `Missing required option --${flag}.`, { hint: 'Run \"devworkspace <command> --help\".' });\n return v;\n}\n\nfunction oneOf<T extends string>(v: string | undefined, allowed: readonly T[], flag: string, fallback?: T): T {\n const x = v ?? fallback;\n if (x === undefined || !(allowed as readonly string[]).includes(x)) {\n throw new DevWorkspaceError('USAGE', `--${flag} must be one of: ${allowed.join(', ')}.`);\n }\n return x as T;\n}\n\ntype Handler = (c: Ctx) => Promise<void>;\n\nasync function runSetupCommand(c: Ctx, repair: boolean): Promise<void> {\n const v = c.args.values;\n const progress = c.json ? undefined : (e: { id: string; step: string; state: string; detail?: string }): void => {\n if (e.state === 'info' && !e.detail) return;\n const mark = e.state === 'ok' ? c.style.sym.ok : e.state === 'fail' ? c.style.sym.fail : e.state === 'skip' ? c.style.sym.info : c.style.sym.arrow;\n c.err(` ${mark} [${e.id}] ${e.detail ?? e.step}\\n`);\n };\n const r = await setupIntegrations(c.svc, { yes: bool(v, 'yes'), scope: scopeOf(v), only: list(v, 'only'), repair }, progress);\n c.data(r, renderSetup(c.style, r));\n c.exit = setupExitCode(r);\n}\n\nfunction scopeOf(v: ParsedArgs['values']): InstallScope {\n const s = str(v, 'scope');\n if (s === undefined) return 'project';\n if (s !== 'project' && s !== 'user') throw new DevWorkspaceError('USAGE', '--scope must be \"project\" or \"user\".');\n return s;\n}\n\n/** Exit code for a setup run: 0 verified/awaiting restart, 1 failed or blocked, 2 approval needed, 3 finished but not fully verified. */\nexport function setupExitCode(r: SetupResult): number {\n if (r.dryRun) return EXIT.OK;\n if (r.approvalRequired) return EXIT.USAGE;\n const s = r.outcomes.filter((o) => o.report.required).map((o) => o.report.status);\n if (s.some((x) => x === 'FAILED' || x === 'PREREQUISITES_MISSING')) return EXIT.FAILURE;\n if (s.every((x) => x === 'VERIFIED' || x === 'RESTART_REQUIRED')) return EXIT.OK;\n return EXIT.WARNINGS;\n}\n\nconst handlers: Record<string, Handler> = {\n async init(c) {\n const withInt = bool(c.args.values, 'with-integrations');\n const r = await initWorkspace({\n ...c.svc,\n root: str(c.args.values, 'root'),\n ...(withInt && !c.svc.dryRun ? { withIntegrations: { yes: bool(c.args.values, 'yes'), scope: scopeOf(c.args.values) } } : {}),\n });\n c.data(r, renderInit(c.style, r));\n if (r.setup) c.exit = setupExitCode(r.setup);\n },\n async setup(c) {\n if (!bool(c.args.values, 'integrations')) {\n throw new DevWorkspaceError('USAGE', 'Say what to set up: devworkspace setup --integrations', { hint: 'Run \"devworkspace setup --help\".' });\n }\n await runSetupCommand(c, false);\n },\n async integrations(c) {\n const sub = c.rest[0] ?? 'status';\n if (sub === 'repair') {\n await runSetupCommand(c, true);\n } else if (sub === 'status') {\n const r = await integrationsStatus(c.svc, { deep: !bool(c.args.values, 'quick'), restarted: bool(c.args.values, 'restarted') });\n c.data(r, renderIntegrationsStatus(c.style, r));\n if (bool(c.args.values, 'strict') && !r.summary.complete) c.exit = EXIT.WARNINGS;\n } else throw new DevWorkspaceError('USAGE', `Unknown integrations subcommand \"${sub}\".`, { hint: 'Use: status, repair.' });\n },\n async analyze(c) {\n const ws = await requireWorkspace(c.svc.cwd);\n const r = c.svc.dryRun ? await analyzeWorkspace(ws, c.svc) : await mutate(c.svc, (w) => analyzeWorkspace(w, c.svc));\n c.data(r, renderAnalyze(c.style, r));\n },\n async status(c) {\n const r = await getStatus(c.svc);\n c.data(r, renderStatus(c.style, r));\n if (!r.initialized || r.workspace === 'Unreadable') c.exit = EXIT.FAILURE;\n else if (bool(c.args.values, 'strict') && (r.workspace !== 'Healthy' || r.knowledge.stale > 0 || !r.onboarding.ready)) c.exit = EXIT.WARNINGS;\n },\n async doctor(c) {\n const r = await runDoctor({ ...c.svc, fix: bool(c.args.values, 'fix') });\n c.data(r, renderDoctor(c.style, r));\n if (!r.healthy) c.exit = EXIT.FAILURE;\n else if (bool(c.args.values, 'strict') && r.counts.warn > 0) c.exit = EXIT.WARNINGS;\n },\n async refresh(c) {\n const r = await refreshWorkspace(c.svc);\n c.data(r, renderRefresh(c.style, r));\n },\n async context(c) {\n const r = await getContext(c.svc, { topic: str(c.args.values, 'topic'), full: bool(c.args.values, 'full') });\n c.data(r, renderContext(c.style, r));\n },\n async fact(c) {\n const sub = c.rest[0];\n const v = c.args.values;\n if (sub === 'add') {\n const sourceType = oneOf<SourceType>(str(v, 'source-type'), SOURCE_TYPES, 'source-type', 'ai');\n const input = {\n key: need(str(v, 'key'), 'key'),\n value: need(str(v, 'value'), 'value'),\n source: need(str(v, 'source'), 'source'),\n sourceType,\n sources: list(v, 'file'),\n confidence: oneOf<Confidence>(str(v, 'confidence')?.toUpperCase(), CONFIDENCE, 'confidence', 'MEDIUM'),\n status: str(v, 'status') ? oneOf<FactStatus>(str(v, 'status')!.toUpperCase(), FACT_STATUS, 'status') : undefined,\n };\n const r = await addFact(c.svc, input);\n c.data(r, `${c.style.ok(c.style.sym.ok)} Fact ${r.action}: ${r.fact.key} [${r.fact.status}/${r.fact.confidence}]`);\n } else if (sub === 'verify') {\n const f = await verifyFactByKey(c.svc, need(c.rest[1], 'key (positional)'));\n c.data(f, `${c.style.ok(c.style.sym.ok)} Verified ${f.key} [${f.status}]`);\n } else if (sub === 'remove') {\n const key = need(c.rest[1], 'key (positional)');\n const removed = await removeFactByKey(c.svc, key);\n if (!removed) throw new DevWorkspaceError('NOT_FOUND', `No fact with key \"${key}\".`);\n c.data({ removed: key }, `${c.style.ok(c.style.sym.ok)} Removed ${key}`);\n } else if (sub === 'list' || sub === undefined) {\n const ws = await requireWorkspace(c.svc.cwd);\n const facts = (await loadFacts(ws)).facts;\n c.data(facts, facts.length ? facts.map((f) => `${f.key} [${f.status}] ${f.value}`).join('\\n') : 'No facts recorded yet.');\n } else throw new DevWorkspaceError('USAGE', `Unknown fact subcommand \"${sub}\".`, { hint: 'Use: add, verify, remove, list.' });\n },\n async task(c) {\n const v = c.args.values;\n let sub = c.rest[0];\n const known = ['new', 'list', 'show', 'status', 'update', 'verify', 'tests', 'attest'];\n // `devworkspace task \"<description>\"` is shorthand for `task new`.\n if (sub !== undefined && !known.includes(sub)) {\n c.rest.unshift('new');\n sub = 'new';\n }\n const id = c.rest[1];\n switch (sub) {\n case 'new': {\n const text = c.rest.slice(1).join(' ').trim();\n if (!text) throw new DevWorkspaceError('USAGE', 'Describe the task: devworkspace task new \"<request>\"');\n const r = await createTask(c.svc, { text, type: str(v, 'type'), title: str(v, 'title') });\n const checks = r.task.verification.map((x) => `${x.check}${x.status === 'SKIPPED' ? ' (skipped: user override)' : ''}`).join(', ') || 'none';\n c.data(r, [\n `${c.style.ok(c.style.sym.ok)} Created ${r.task.id}`,\n ` type: ${r.task.type} (${r.classification.confidence === 'high' ? 'classified' : 'low confidence - confirm with the user'})${r.classification.readOnly ? ' - read-only request' : ''}`,\n ` required verification: ${checks}`,\n ` workflow: ${r.workflow.steps[0]}`,\n ].join('\\n'));\n break;\n }\n case 'list': {\n const { tasks, corrupt } = await listTasksService(c.svc, bool(v, 'all'));\n const text = tasks.length ? tasks.map((t) => `${t.id} ${t.status.padEnd(11)} ${t.type.padEnd(13)} ${t.title}`).join('\\n') : 'No tasks.';\n c.data({ tasks, corrupt }, text + (corrupt.length ? `\\n${c.style.sym.warn} ${corrupt.length} unreadable task file(s); run: devworkspace doctor` : ''));\n break;\n }\n case 'show': {\n const r = await showTask(c.svc, need(id, 'id (positional)'));\n c.data(r, renderTask(c.style, r.task, r.gate));\n break;\n }\n case 'status': {\n const r = await setTaskStatus(c.svc, need(id, 'id (positional)'), need(c.rest[2], 'status (positional)'), str(v, 'note'));\n const warn = r.gate?.warnings.map((w) => `\\n ${c.style.sym.warn} ${w}`).join('') ?? '';\n c.data(r, `${c.style.ok(c.style.sym.ok)} ${r.task.id} is now ${r.task.status}${warn}`);\n break;\n }\n case 'update': {\n const t = await updateTask(c.svc, need(id, 'id (positional)'), {\n title: str(v, 'title'),\n summary: str(v, 'summary'),\n criteria: list(v, 'criteria'),\n plan: list(v, 'plan'),\n areas: list(v, 'area'),\n decisions: list(v, 'decision-note'),\n blockers: list(v, 'blocker'),\n clearBlockers: bool(v, 'clear-blockers'),\n require: list(v, 'require'),\n });\n c.data(t, renderTask(c.style, t));\n break;\n }\n case 'verify': {\n const t = await recordVerification(c.svc, need(id, 'id (positional)'), need(c.rest[2], 'check (positional)'), need(c.rest[3], 'result (positional: pass|fail|skip|pending)'), {\n reason: str(v, 'reason'),\n detail: str(v, 'detail'),\n });\n c.data(t, renderTask(c.style, t));\n break;\n }\n case 'tests': {\n const phase = oneOf(str(v, 'phase'), ['baseline', 'after'] as const, 'phase');\n const t = await recordTests(c.svc, need(id, 'id (positional)'), phase, int(v, 'passed') ?? NaN, int(v, 'failed') ?? NaN);\n c.data(t, renderTask(c.style, t));\n break;\n }\n case 'attest': {\n const t = await attestTask(c.svc, need(id, 'id (positional)'), {\n userWorkIntact: bool(v, 'user-work-intact') || undefined,\n knowledgeReviewed: bool(v, 'knowledge-reviewed') || undefined,\n finalStateInspected: bool(v, 'final-state-inspected') || undefined,\n });\n c.data(t, renderTask(c.style, t));\n break;\n }\n default:\n throw new DevWorkspaceError('USAGE', 'Missing task subcommand.', { hint: 'Run \"devworkspace task --help\".' });\n }\n },\n async decision(c) {\n const v = c.args.values;\n const sub = c.rest[0] ?? 'list';\n if (sub === 'add') {\n const d = await recordDecision(c.svc, {\n title: need(str(v, 'title'), 'title'),\n context: need(str(v, 'context'), 'context'),\n decision: need(str(v, 'decision'), 'decision'),\n consequences: need(str(v, 'consequences'), 'consequences'),\n supersedes: int(v, 'supersedes'),\n });\n c.data(d, `${c.style.ok(c.style.sym.ok)} Recorded decision ${String(d.number).padStart(4, '0')}: ${d.title}`);\n } else if (sub === 'list') {\n const ds = await getDecisions(c.svc);\n c.data(ds, ds.length ? ds.map((d) => `${String(d.number).padStart(4, '0')} [${d.status}] ${d.date} ${d.title}`).join('\\n') : 'No decisions recorded.');\n } else if (sub === 'show') {\n const d = await getDecision(c.svc, Number(need(c.rest[1], 'number (positional)')));\n c.data(d, `# ${d.number}. ${d.title} [${d.status}] ${d.date}\\n\\nContext:\\n${d.context}\\n\\nDecision:\\n${d.decision}\\n\\nConsequences:\\n${d.consequences}`);\n } else throw new DevWorkspaceError('USAGE', `Unknown decision subcommand \"${sub}\".`, { hint: 'Use: add, list, show.' });\n },\n async session(c) {\n const v = c.args.values;\n const sub = c.rest[0] ?? 'list';\n if (sub === 'save') {\n const s = await recordSession(c.svc, {\n goal: need(str(v, 'goal'), 'goal'),\n completed: list(v, 'done'),\n areas: list(v, 'area'),\n testsRun: list(v, 'tests-run'),\n decisions: list(v, 'decision-note'),\n remaining: list(v, 'remaining'),\n next: str(v, 'next') ?? '',\n taskId: str(v, 'task'),\n });\n c.data(s, `${c.style.ok(c.style.sym.ok)} Saved session ${s.id}`);\n } else if (sub === 'list') {\n const ss = await getSessions(c.svc, int(v, 'limit') ?? 10);\n c.data(ss, ss.length ? ss.map((s) => `${s.id} ${s.goal} ${c.style.sym.arrow} ${s.next || '(no next step)'}`).join('\\n') : 'No sessions saved.');\n } else throw new DevWorkspaceError('USAGE', `Unknown session subcommand \"${sub}\".`, { hint: 'Use: save, list.' });\n },\n async agent(c) {\n if (c.rest[0] !== 'install') throw new DevWorkspaceError('USAGE', 'Usage: devworkspace agent install [--agent claude]');\n const r = await installAgent(c.svc, str(c.args.values, 'agent') ?? 'claude');\n c.data(r, renderAgentInstall(c.style, r));\n },\n async export(c) {\n const r = await exportWorkspace(c.svc, str(c.args.values, 'out'));\n c.data(r, renderExport(c.style, r));\n },\n async import(c) {\n const file = need(c.rest[0], 'file (positional)');\n const r = await importWorkspace({ ...c.svc, overwrite: bool(c.args.values, 'overwrite'), allowDifferentProject: bool(c.args.values, 'allow-different-project') }, file);\n c.data(r, renderImport(c.style, r));\n },\n async reset(c) {\n const r = await resetWorkspace({ ...c.svc, confirm: bool(c.args.values, 'yes'), includeAgentFiles: bool(c.args.values, 'include-agent-files') });\n c.data(r, renderReset(c.style, r));\n if (!r.executed && !c.svc.dryRun) {\n if (!c.json) c.out('\\nNothing was deleted. Re-run with --yes to confirm.');\n c.exit = EXIT.USAGE;\n }\n },\n async migrate(c) {\n const r = await migrateWorkspace(c.svc);\n c.data(r, renderMigrate(c.style, r));\n },\n};\n\nconst ALIASES: Record<string, string> = { tasks: 'task' };\n\n/** Run the CLI and return the process exit code. Never calls process.exit, so it is directly testable. */\nexport async function run(argv: string[], io: CliIO = defaultIO()): Promise<number> {\n let debug = argv.includes('--debug');\n let json = argv.includes('--json');\n try {\n const args = parseCli(argv);\n const v = args.values;\n debug = bool(v, 'debug');\n json = bool(v, 'json');\n const color = io.isTTY && !io.env.NO_COLOR && !bool(v, 'no-color') && io.env.TERM !== 'dumb';\n const ascii = bool(v, 'ascii') || !!io.env.DEVWORKSPACE_ASCII;\n const style = makeStyle({ color, ascii });\n const logger = createLogger(debug ? 'debug' : 'warn', (l) => io.stderr(l + '\\n'));\n\n if (bool(v, 'version') || args.positionals[0] === 'version') {\n io.stdout(packageVersion() + '\\n');\n return EXIT.OK;\n }\n const [rawCmd, ...rest] = args.positionals;\n const cmd = rawCmd ? (ALIASES[rawCmd] ?? rawCmd) : undefined;\n if (rawCmd === 'tasks') rest.unshift('list');\n if (!cmd || cmd === 'help') {\n const target = cmd === 'help' ? COMMANDS.find((c) => c.name === rest[0]) : undefined;\n io.stdout((target ? commandHelp(target) : topHelp(packageVersion())) + '\\n');\n return EXIT.OK;\n }\n const help = COMMANDS.find((c) => c.name === cmd);\n const handler = handlers[cmd];\n if (!help || !handler) {\n throw new DevWorkspaceError('USAGE', `Unknown command \"${rawCmd}\".`, { hint: 'Run \"devworkspace --help\" to see available commands.' });\n }\n if (bool(v, 'help')) {\n io.stdout(commandHelp(help) + '\\n');\n return EXIT.OK;\n }\n\n const cwd = path.resolve(io.cwd, str(v, 'cwd') ?? '.');\n const ctx: Ctx = {\n args,\n rest,\n svc: { cwd, dryRun: bool(v, 'dry-run'), env: io.env, runner: io.runner, ...(io.env.DEVWORKSPACE_HOME ? { homeDir: io.env.DEVWORKSPACE_HOME } : {}) },\n json,\n style,\n exit: EXIT.OK,\n out: (t) => io.stdout(t + '\\n'),\n err: (t) => io.stderr(t),\n data: (value, text) => io.stdout((json ? JSON.stringify(value, null, 2) : text) + '\\n'),\n };\n logger.debug(`command=${cmd} cwd=${cwd}`);\n await handler(ctx);\n return ctx.exit;\n } catch (e) {\n if (json) {\n const err = isDevWorkspaceError(e)\n ? { code: e.code, message: e.message, hint: e.hint ?? null, stateChanged: e.stateChanged }\n : { code: 'INTERNAL', message: e instanceof Error ? e.message : String(e), hint: null, stateChanged: false };\n io.stdout(JSON.stringify({ error: err }, null, 2) + '\\n');\n } else {\n io.stderr(formatError(e, debug) + '\\n');\n }\n return isDevWorkspaceError(e) ? e.exitCode : EXIT.FAILURE;\n }\n}\n"]}
|
package/dist/core/workspace.js
CHANGED
|
@@ -26,7 +26,7 @@ export function wsPaths(root) {
|
|
|
26
26
|
stateDir: j('state'),
|
|
27
27
|
analysisState: j('state', 'analysis.json'),
|
|
28
28
|
localDir: j('local'),
|
|
29
|
-
integrationsState: j('
|
|
29
|
+
integrationsState: j('state', 'integrations.json'),
|
|
30
30
|
backupsDir: j('local', 'backups'),
|
|
31
31
|
gitignore: j('.gitignore'),
|
|
32
32
|
};
|
|
@@ -86,6 +86,7 @@ export const LOCAL_GITIGNORE = [
|
|
|
86
86
|
'local/',
|
|
87
87
|
'analysis/onboarding-prompt.md',
|
|
88
88
|
'analysis/refresh-prompt.md',
|
|
89
|
+
'state/integrations.json',
|
|
89
90
|
'*.tmp',
|
|
90
91
|
'',
|
|
91
92
|
].join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { DevWorkspaceError } from '../errors/index.js';\nimport { atomicWriteJson, ensureDir, pathExists, readJsonFile } from '../utils/fs.js';\nimport { validateProject, type ProjectConfig, SCHEMA_VERSION } from '../config/schemas.js';\nimport { MIGRATIONS, migrateData, type Migration } from './migrations.js';\n\nexport const WORKSPACE_DIR = '.devworkspace';\n\nexport interface Ws {\n root: string;\n dir: string;\n projectJson: string;\n contextDir: string;\n facts: string;\n commands: string;\n decisionsDir: string;\n tasksActive: string;\n tasksCompleted: string;\n sessionsDir: string;\n analysisDir: string;\n discovery: string;\n onboardingPrompt: string;\n refreshPrompt: string;\n stateDir: string;\n analysisState: string;\n localDir: string;\n integrationsState: string;\n backupsDir: string;\n gitignore: string;\n}\n\nexport function wsPaths(root: string): Ws {\n const dir = path.join(root, WORKSPACE_DIR);\n const j = (...p: string[]): string => path.join(dir, ...p);\n return {\n root,\n dir,\n projectJson: j('project.json'),\n contextDir: j('context'),\n facts: j('context', 'facts.json'),\n commands: j('context', 'commands.json'),\n decisionsDir: j('decisions'),\n tasksActive: j('tasks', 'active'),\n tasksCompleted: j('tasks', 'completed'),\n sessionsDir: j('sessions'),\n analysisDir: j('analysis'),\n discovery: j('analysis', 'discovery.json'),\n onboardingPrompt: j('analysis', 'onboarding-prompt.md'),\n refreshPrompt: j('analysis', 'refresh-prompt.md'),\n stateDir: j('state'),\n analysisState: j('state', 'analysis.json'),\n localDir: j('local'),\n integrationsState: j('
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { DevWorkspaceError } from '../errors/index.js';\nimport { atomicWriteJson, ensureDir, pathExists, readJsonFile } from '../utils/fs.js';\nimport { validateProject, type ProjectConfig, SCHEMA_VERSION } from '../config/schemas.js';\nimport { MIGRATIONS, migrateData, type Migration } from './migrations.js';\n\nexport const WORKSPACE_DIR = '.devworkspace';\n\nexport interface Ws {\n root: string;\n dir: string;\n projectJson: string;\n contextDir: string;\n facts: string;\n commands: string;\n decisionsDir: string;\n tasksActive: string;\n tasksCompleted: string;\n sessionsDir: string;\n analysisDir: string;\n discovery: string;\n onboardingPrompt: string;\n refreshPrompt: string;\n stateDir: string;\n analysisState: string;\n localDir: string;\n integrationsState: string;\n backupsDir: string;\n gitignore: string;\n}\n\nexport function wsPaths(root: string): Ws {\n const dir = path.join(root, WORKSPACE_DIR);\n const j = (...p: string[]): string => path.join(dir, ...p);\n return {\n root,\n dir,\n projectJson: j('project.json'),\n contextDir: j('context'),\n facts: j('context', 'facts.json'),\n commands: j('context', 'commands.json'),\n decisionsDir: j('decisions'),\n tasksActive: j('tasks', 'active'),\n tasksCompleted: j('tasks', 'completed'),\n sessionsDir: j('sessions'),\n analysisDir: j('analysis'),\n discovery: j('analysis', 'discovery.json'),\n onboardingPrompt: j('analysis', 'onboarding-prompt.md'),\n refreshPrompt: j('analysis', 'refresh-prompt.md'),\n stateDir: j('state'),\n analysisState: j('state', 'analysis.json'),\n localDir: j('local'),\n integrationsState: j('state', 'integrations.json'),\n backupsDir: j('local', 'backups'),\n gitignore: j('.gitignore'),\n };\n}\n\n/** Walk upward from start looking for an initialised workspace. The workspace location is never stored in it. */\nexport async function findWorkspaceRoot(start: string): Promise<string | null> {\n let dir = path.resolve(start);\n for (;;) {\n if (await pathExists(path.join(dir, WORKSPACE_DIR, 'project.json'))) return dir;\n const parent = path.dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n}\n\nexport async function requireWorkspace(cwd: string): Promise<Ws> {\n const root = await findWorkspaceRoot(cwd);\n if (!root) {\n throw new DevWorkspaceError('NOT_INITIALIZED', 'No DevWorkspace found in this directory or any parent.', {\n hint: 'Run \"devworkspace init\" in the project root.',\n });\n }\n return wsPaths(root);\n}\n\nexport async function loadProject(ws: Ws, migrations: Migration[] = MIGRATIONS.project ?? []): Promise<ProjectConfig> {\n const raw = await readJsonFile(ws.projectJson);\n const { data } = migrateData(raw, SCHEMA_VERSION, migrations, 'project.json');\n return validateProject(data);\n}\n\nexport async function saveProject(ws: Ws, cfg: ProjectConfig): Promise<void> {\n validateProject(cfg);\n await backupIfVersionChanges(ws, ws.projectJson, cfg.schemaVersion);\n await atomicWriteJson(ws.projectJson, cfg);\n}\n\n/** Before a write that upgrades a file's schemaVersion on disk, keep a copy of the old file. */\nexport async function backupIfVersionChanges(ws: Ws, file: string, newVersion: number, stamp?: string): Promise<string | null> {\n if (!(await pathExists(file))) return null;\n let onDisk: unknown;\n try {\n onDisk = ((await readJsonFile(file)) as { schemaVersion?: unknown }).schemaVersion;\n } catch {\n onDisk = undefined;\n }\n if (onDisk === newVersion) return null;\n const folder = stamp ?? new Date().toISOString().replace(/[:.]/g, '-');\n const dest = path.join(ws.backupsDir, folder, path.relative(ws.dir, file));\n await ensureDir(path.dirname(dest));\n await fs.copyFile(file, dest);\n return dest;\n}\n\nexport const LOCAL_GITIGNORE = [\n '# Managed by DevWorkspace. Machine-local state and regenerable output.',\n 'local/',\n 'analysis/onboarding-prompt.md',\n 'analysis/refresh-prompt.md',\n 'state/integrations.json',\n '*.tmp',\n '',\n].join('\\n');\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export { recordDecision, getDecisions, recordSession, getSessions } from './serv
|
|
|
11
11
|
export { installAgent } from './services/agent.js';
|
|
12
12
|
export { exportWorkspace, importWorkspace } from './services/portability.js';
|
|
13
13
|
export { migrateWorkspace } from './services/migrate.js';
|
|
14
|
+
export { resetWorkspace } from './services/reset.js';
|
|
15
|
+
export { setupIntegrations, integrationsStatus } from './services/integrations.js';
|
|
14
16
|
export { classifyRequest, detectConstraints, WORKFLOWS } from './tasks/routing.js';
|
|
15
17
|
export { evaluateGate } from './tasks/task.js';
|
|
16
18
|
export { redact, findSecrets, containsSecret } from './security/redact.js';
|
|
@@ -22,5 +24,5 @@ export type { StatusResult } from './services/status.js';
|
|
|
22
24
|
export type { DoctorResult, DoctorCheck } from './services/doctor.js';
|
|
23
25
|
export type { Task, TaskStatus, TaskType } from './tasks/task.js';
|
|
24
26
|
export type { Fact, ProjectConfig, CommandEntry } from './config/schemas.js';
|
|
25
|
-
export type {
|
|
27
|
+
export type { IntegrationReport, StatusCode as IntegrationStatusCode } from './integrations/types.js';
|
|
26
28
|
export type { AgentAdapter, PlannedChange } from './agents/types.js';
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,8 @@ export { recordDecision, getDecisions, recordSession, getSessions } from './serv
|
|
|
12
12
|
export { installAgent } from './services/agent.js';
|
|
13
13
|
export { exportWorkspace, importWorkspace } from './services/portability.js';
|
|
14
14
|
export { migrateWorkspace } from './services/migrate.js';
|
|
15
|
+
export { resetWorkspace } from './services/reset.js';
|
|
16
|
+
export { setupIntegrations, integrationsStatus } from './services/integrations.js';
|
|
15
17
|
export { classifyRequest, detectConstraints, WORKFLOWS } from './tasks/routing.js';
|
|
16
18
|
export { evaluateGate } from './tasks/task.js';
|
|
17
19
|
export { redact, findSecrets, containsSecret } from './security/redact.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACrJ,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["// Programmatic API: the same engine that powers the CLI, for a future VS Code extension, dashboards and automation.\nexport { packageVersion } from './core/version.js';\nexport { DevWorkspaceError, EXIT } from './errors/index.js';\nexport { initWorkspace } from './services/init.js';\nexport { analyzeWorkspace } from './services/analysis.js';\nexport { getStatus } from './services/status.js';\nexport { runDoctor } from './services/doctor.js';\nexport { refreshWorkspace } from './services/refresh.js';\nexport { getContext, addFact, verifyFactByKey, removeFactByKey } from './services/knowledge.js';\nexport { createTask, listTasksService, showTask, setTaskStatus, updateTask, recordVerification, recordTests, attestTask } from './services/tasks.js';\nexport { recordDecision, getDecisions, recordSession, getSessions } from './services/records.js';\nexport { installAgent } from './services/agent.js';\nexport { exportWorkspace, importWorkspace } from './services/portability.js';\nexport { migrateWorkspace } from './services/migrate.js';\nexport { classifyRequest, detectConstraints, WORKFLOWS } from './tasks/routing.js';\nexport { evaluateGate } from './tasks/task.js';\nexport { redact, findSecrets, containsSecret } from './security/redact.js';\nexport { isSensitiveFile } from './security/files.js';\nexport { buildOnboardingPrompt } from './prompts/onboarding.js';\nexport { ONBOARDING_REQUIREMENTS, REFRESH_REQUIREMENTS, validatePrompt } from './prompts/requirements.js';\nexport type { ServiceOptions } from './services/common.js';\nexport type { StatusResult } from './services/status.js';\nexport type { DoctorResult, DoctorCheck } from './services/doctor.js';\nexport type { Task, TaskStatus, TaskType } from './tasks/task.js';\nexport type { Fact, ProjectConfig, CommandEntry } from './config/schemas.js';\nexport type {
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACrJ,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["// Programmatic API: the same engine that powers the CLI, for a future VS Code extension, dashboards and automation.\nexport { packageVersion } from './core/version.js';\nexport { DevWorkspaceError, EXIT } from './errors/index.js';\nexport { initWorkspace } from './services/init.js';\nexport { analyzeWorkspace } from './services/analysis.js';\nexport { getStatus } from './services/status.js';\nexport { runDoctor } from './services/doctor.js';\nexport { refreshWorkspace } from './services/refresh.js';\nexport { getContext, addFact, verifyFactByKey, removeFactByKey } from './services/knowledge.js';\nexport { createTask, listTasksService, showTask, setTaskStatus, updateTask, recordVerification, recordTests, attestTask } from './services/tasks.js';\nexport { recordDecision, getDecisions, recordSession, getSessions } from './services/records.js';\nexport { installAgent } from './services/agent.js';\nexport { exportWorkspace, importWorkspace } from './services/portability.js';\nexport { migrateWorkspace } from './services/migrate.js';\nexport { resetWorkspace } from './services/reset.js';\nexport { setupIntegrations, integrationsStatus } from './services/integrations.js';\nexport { classifyRequest, detectConstraints, WORKFLOWS } from './tasks/routing.js';\nexport { evaluateGate } from './tasks/task.js';\nexport { redact, findSecrets, containsSecret } from './security/redact.js';\nexport { isSensitiveFile } from './security/files.js';\nexport { buildOnboardingPrompt } from './prompts/onboarding.js';\nexport { ONBOARDING_REQUIREMENTS, REFRESH_REQUIREMENTS, validatePrompt } from './prompts/requirements.js';\nexport type { ServiceOptions } from './services/common.js';\nexport type { StatusResult } from './services/status.js';\nexport type { DoctorResult, DoctorCheck } from './services/doctor.js';\nexport type { Task, TaskStatus, TaskType } from './tasks/task.js';\nexport type { Fact, ProjectConfig, CommandEntry } from './config/schemas.js';\nexport type { IntegrationReport, StatusCode as IntegrationStatusCode } from './integrations/types.js';\nexport type { AgentAdapter, PlannedChange } from './agents/types.js';\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Skills (addyosmani/agent-skills). Verified against the repository on 2026-10-09:
|
|
3
|
+
* - native Claude Code plugin: marketplace `addy-agent-skills`, plugin `agent-skills`
|
|
4
|
+
* - portable: `npx skills add addyosmani/agent-skills` copies skills/<name>/ (25 skills)
|
|
5
|
+
* - known limitation (README): per-skill installs omit the shared references/ checklists
|
|
6
|
+
* Core skills below are a stable subset used only to decide whether a portable install is present.
|
|
7
|
+
*/
|
|
8
|
+
export declare const agentSkills: import("../types.js").IntegrationAdapter;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AGENT_SKILLS_NOTICE } from '../notices.js';
|
|
2
|
+
import { createPluginSkillAdapter } from './pluginSkill.js';
|
|
3
|
+
/**
|
|
4
|
+
* Agent Skills (addyosmani/agent-skills). Verified against the repository on 2026-10-09:
|
|
5
|
+
* - native Claude Code plugin: marketplace `addy-agent-skills`, plugin `agent-skills`
|
|
6
|
+
* - portable: `npx skills add addyosmani/agent-skills` copies skills/<name>/ (25 skills)
|
|
7
|
+
* - known limitation (README): per-skill installs omit the shared references/ checklists
|
|
8
|
+
* Core skills below are a stable subset used only to decide whether a portable install is present.
|
|
9
|
+
*/
|
|
10
|
+
export const agentSkills = createPluginSkillAdapter({
|
|
11
|
+
id: 'agent-skills',
|
|
12
|
+
name: 'Agent Skills',
|
|
13
|
+
docsUrl: 'https://github.com/addyosmani/agent-skills',
|
|
14
|
+
usage: 'Use the Agent Skills workflows for engineering methodology: spec (requirements), plan (task breakdown), build (implementation), ' +
|
|
15
|
+
'test (verification), review (review gates), code-simplify (reduce complexity) and ship (release). Invoke them instead of re-deriving the method from memory. ' +
|
|
16
|
+
'The /spec /plan /build /test /review /code-simplify /ship commands exist only when the native plugin is installed; with portable skills, ask for the skill by name.',
|
|
17
|
+
native: { marketplaceName: 'addy-agent-skills', marketplaceUrl: 'https://github.com/addyosmani/agent-skills.git', pluginName: 'agent-skills' },
|
|
18
|
+
skillsRepo: 'addyosmani/agent-skills',
|
|
19
|
+
coreSkills: ['using-agent-skills', 'spec-driven-development', 'planning-and-task-breakdown', 'test-driven-development', 'code-review-and-quality', 'shipping-and-launch'],
|
|
20
|
+
notice: AGENT_SKILLS_NOTICE,
|
|
21
|
+
nativeOnly: ['slash commands', 'agent personas'],
|
|
22
|
+
nativeHooks: false,
|
|
23
|
+
referencesDir: 'references',
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=agent-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-skills.js","sourceRoot":"","sources":["../../../src/integrations/adapters/agent-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC;IAClD,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,4CAA4C;IACrD,KAAK,EACH,kIAAkI;QAClI,+JAA+J;QAC/J,qKAAqK;IACvK,MAAM,EAAE,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,gDAAgD,EAAE,UAAU,EAAE,cAAc,EAAE;IAC9I,UAAU,EAAE,yBAAyB;IACrC,UAAU,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,qBAAqB,CAAC;IACzK,MAAM,EAAE,mBAAmB;IAC3B,UAAU,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAChD,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,YAAY;CAC5B,CAAC,CAAC","sourcesContent":["import { AGENT_SKILLS_NOTICE } from '../notices.js';\nimport { createPluginSkillAdapter } from './pluginSkill.js';\n\n/**\n * Agent Skills (addyosmani/agent-skills). Verified against the repository on 2026-10-09:\n * - native Claude Code plugin: marketplace `addy-agent-skills`, plugin `agent-skills`\n * - portable: `npx skills add addyosmani/agent-skills` copies skills/<name>/ (25 skills)\n * - known limitation (README): per-skill installs omit the shared references/ checklists\n * Core skills below are a stable subset used only to decide whether a portable install is present.\n */\nexport const agentSkills = createPluginSkillAdapter({\n id: 'agent-skills',\n name: 'Agent Skills',\n docsUrl: 'https://github.com/addyosmani/agent-skills',\n usage:\n 'Use the Agent Skills workflows for engineering methodology: spec (requirements), plan (task breakdown), build (implementation), ' +\n 'test (verification), review (review gates), code-simplify (reduce complexity) and ship (release). Invoke them instead of re-deriving the method from memory. ' +\n 'The /spec /plan /build /test /review /code-simplify /ship commands exist only when the native plugin is installed; with portable skills, ask for the skill by name.',\n native: { marketplaceName: 'addy-agent-skills', marketplaceUrl: 'https://github.com/addyosmani/agent-skills.git', pluginName: 'agent-skills' },\n skillsRepo: 'addyosmani/agent-skills',\n coreSkills: ['using-agent-skills', 'spec-driven-development', 'planning-and-task-breakdown', 'test-driven-development', 'code-review-and-quality', 'shipping-and-launch'],\n notice: AGENT_SKILLS_NOTICE,\n nativeOnly: ['slash commands', 'agent personas'],\n nativeHooks: false,\n referencesDir: 'references',\n});\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Tool } from '../exec.js';
|
|
2
|
+
import type { AdapterContext, InstallScope, PlanStep } from '../types.js';
|
|
3
|
+
/** Minimum Claude Code versions for the flags we rely on (from the plugin CLI reference). */
|
|
4
|
+
export declare const MIN_PLUGIN_JSON = "2.1.268";
|
|
5
|
+
export declare const MIN_MARKETPLACE_JSON = "2.1.287";
|
|
6
|
+
export interface InstalledPlugin {
|
|
7
|
+
id: string;
|
|
8
|
+
version?: string;
|
|
9
|
+
scope: string;
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
projectPath?: string;
|
|
12
|
+
errors?: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface NativeSpec {
|
|
15
|
+
marketplaceName: string;
|
|
16
|
+
/** Always an https git URL: `owner/repo` shorthand makes Claude Code try SSH, which fails without GitHub keys. */
|
|
17
|
+
marketplaceUrl: string;
|
|
18
|
+
pluginName: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const pluginId: (s: NativeSpec) => string;
|
|
21
|
+
export declare function listPlugins(ctx: AdapterContext, claude: Tool): Promise<{
|
|
22
|
+
ok: boolean;
|
|
23
|
+
plugins: InstalledPlugin[];
|
|
24
|
+
error?: string;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function marketplaceRegistered(ctx: AdapterContext, claude: Tool, name: string): Promise<boolean | null>;
|
|
27
|
+
export declare function samePath(a: string | undefined, b: string): boolean;
|
|
28
|
+
/** Match the plugin for this project: user-scope installs apply everywhere; project/local installs must belong to this root. */
|
|
29
|
+
export declare function findPlugin(plugins: InstalledPlugin[], id: string, root: string): InstalledPlugin | undefined;
|
|
30
|
+
/** Cheap check of settings files (no process spawn): which plugins/marketplaces are declared. */
|
|
31
|
+
export declare function readDeclared(ctx: AdapterContext, spec: NativeSpec): Promise<{
|
|
32
|
+
marketplace: boolean;
|
|
33
|
+
enabled: InstallScope | null;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const SSH_FIX = "git config --global url.\"https://github.com/\".insteadOf git@github.com:";
|
|
36
|
+
/** Claude Code clones plugin sources over SSH by default; without a GitHub SSH key that fails with these messages. */
|
|
37
|
+
export declare function sshHint(text: string): string | undefined;
|
|
38
|
+
/** Steps that register the marketplace (if needed) and install the plugin at the given scope. */
|
|
39
|
+
export declare function nativeSteps(ctx: AdapterContext, claude: Tool, spec: NativeSpec, scope: InstallScope, opts: {
|
|
40
|
+
registered: boolean;
|
|
41
|
+
}): PlanStep[];
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { promises as fs } from 'node:fs';
|
|
3
|
+
import { compareVersions, parseLastJsonLine } from '../exec.js';
|
|
4
|
+
import { isInside } from '../../utils/paths.js';
|
|
5
|
+
/** Minimum Claude Code versions for the flags we rely on (from the plugin CLI reference). */
|
|
6
|
+
export const MIN_PLUGIN_JSON = '2.1.268';
|
|
7
|
+
export const MIN_MARKETPLACE_JSON = '2.1.287';
|
|
8
|
+
export const pluginId = (s) => `${s.pluginName}@${s.marketplaceName}`;
|
|
9
|
+
export async function listPlugins(ctx, claude) {
|
|
10
|
+
const r = await ctx.runner.run({ command: claude.command, args: ['plugin', 'list', '--json'], cwd: ctx.root, timeoutMs: 30_000, signal: ctx.signal });
|
|
11
|
+
if (!r.ok)
|
|
12
|
+
return { ok: false, plugins: [], error: (r.stderr || r.error || r.stdout).trim().slice(0, 300) || `exit ${r.code}` };
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(r.stdout.trim().split(/\r?\n/).filter((l) => l.trim().startsWith('[')).pop() ?? r.stdout);
|
|
15
|
+
return { ok: true, plugins: Array.isArray(parsed) ? parsed : [] };
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return { ok: false, plugins: [], error: 'could not parse `claude plugin list --json` output' };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function marketplaceRegistered(ctx, claude, name) {
|
|
22
|
+
const r = await ctx.runner.run({ command: claude.command, args: ['plugin', 'marketplace', 'list'], cwd: ctx.root, timeoutMs: 30_000, signal: ctx.signal });
|
|
23
|
+
if (!r.ok)
|
|
24
|
+
return null;
|
|
25
|
+
return new RegExp(`(^|[^A-Za-z0-9._-])${name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}($|[^A-Za-z0-9._-])`, 'm').test(r.stdout);
|
|
26
|
+
}
|
|
27
|
+
export function samePath(a, b) {
|
|
28
|
+
if (!a)
|
|
29
|
+
return false;
|
|
30
|
+
const norm = (p) => path.resolve(p).replace(/[\\/]+$/, '');
|
|
31
|
+
const x = norm(a);
|
|
32
|
+
const y = norm(b);
|
|
33
|
+
return process.platform === 'win32' ? x.toLowerCase() === y.toLowerCase() : x === y;
|
|
34
|
+
}
|
|
35
|
+
/** Match the plugin for this project: user-scope installs apply everywhere; project/local installs must belong to this root. */
|
|
36
|
+
export function findPlugin(plugins, id, root) {
|
|
37
|
+
return plugins.find((p) => p.id === id && (p.scope === 'user' || p.scope === 'managed' || samePath(p.projectPath, root) || (p.projectPath && isInside(root, p.projectPath))));
|
|
38
|
+
}
|
|
39
|
+
/** Cheap check of settings files (no process spawn): which plugins/marketplaces are declared. */
|
|
40
|
+
export async function readDeclared(ctx, spec) {
|
|
41
|
+
const files = [
|
|
42
|
+
[path.join(ctx.root, '.claude', 'settings.json'), 'project'],
|
|
43
|
+
[path.join(ctx.root, '.claude', 'settings.local.json'), 'project'],
|
|
44
|
+
[path.join(ctx.home, '.claude', 'settings.json'), 'user'],
|
|
45
|
+
];
|
|
46
|
+
let marketplace = false;
|
|
47
|
+
let enabled = null;
|
|
48
|
+
for (const [file, scope] of files) {
|
|
49
|
+
try {
|
|
50
|
+
const j = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
51
|
+
if (j.extraKnownMarketplaces && spec.marketplaceName in j.extraKnownMarketplaces)
|
|
52
|
+
marketplace = true;
|
|
53
|
+
if (j.enabledPlugins && j.enabledPlugins[pluginId(spec)] === true && enabled === null)
|
|
54
|
+
enabled = scope;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* missing or unreadable */
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { marketplace, enabled };
|
|
61
|
+
}
|
|
62
|
+
export const SSH_FIX = 'git config --global url."https://github.com/".insteadOf git@github.com:';
|
|
63
|
+
/** Claude Code clones plugin sources over SSH by default; without a GitHub SSH key that fails with these messages. */
|
|
64
|
+
export function sshHint(text) {
|
|
65
|
+
return /host key verification failed|permission denied \(publickey\)|could not read from remote repository/i.test(text)
|
|
66
|
+
? `Claude Code cloned over SSH and you have no usable GitHub SSH key. The fix documented by Agent Skills changes your global Git config, so run it yourself, then re-run setup: ${SSH_FIX}`
|
|
67
|
+
: undefined;
|
|
68
|
+
}
|
|
69
|
+
function describeFailure(json, stderr, stdout) {
|
|
70
|
+
const msg = typeof json?.message === 'string' ? json.message : (stderr || stdout).trim().split(/\r?\n/).filter(Boolean).slice(-2).join(' ');
|
|
71
|
+
return msg.slice(0, 400) || 'the command failed without output';
|
|
72
|
+
}
|
|
73
|
+
/** Steps that register the marketplace (if needed) and install the plugin at the given scope. */
|
|
74
|
+
export function nativeSteps(ctx, claude, spec, scope, opts) {
|
|
75
|
+
const steps = [];
|
|
76
|
+
const level = scope === 'user' ? 'user-config' : 'project';
|
|
77
|
+
const useMpJson = compareVersions(claude.version, MIN_MARKETPLACE_JSON) >= 0;
|
|
78
|
+
const useJson = compareVersions(claude.version, MIN_PLUGIN_JSON) >= 0;
|
|
79
|
+
const exe = path.basename(claude.command, path.extname(claude.command));
|
|
80
|
+
if (!opts.registered) {
|
|
81
|
+
const args = ['plugin', 'marketplace', 'add', spec.marketplaceUrl, '--scope', scope, ...(useMpJson ? ['--json'] : [])];
|
|
82
|
+
steps.push({
|
|
83
|
+
id: `${spec.marketplaceName}:marketplace`,
|
|
84
|
+
description: `Register the ${spec.marketplaceName} marketplace (${scope} scope)`,
|
|
85
|
+
command: `${exe} ${args.join(' ')}`,
|
|
86
|
+
level,
|
|
87
|
+
async run() {
|
|
88
|
+
const r = await ctx.runner.run({ command: claude.command, args, cwd: ctx.root, timeoutMs: 180_000, signal: ctx.signal });
|
|
89
|
+
const json = parseLastJsonLine(r.stdout);
|
|
90
|
+
if (r.aborted)
|
|
91
|
+
return { ok: false, detail: 'cancelled' };
|
|
92
|
+
if (r.timedOut)
|
|
93
|
+
return { ok: false, detail: 'timed out after 180 s (network?)' };
|
|
94
|
+
if (r.ok && json?.outcome !== 'failed')
|
|
95
|
+
return { ok: true, detail: typeof json?.message === 'string' ? json.message : 'registered' };
|
|
96
|
+
if (/already (on disk|added|exists)/i.test(r.stdout + r.stderr))
|
|
97
|
+
return { ok: true, detail: 'already registered' };
|
|
98
|
+
return { ok: false, detail: describeFailure(json, r.stderr, r.stdout), hint: sshHint(`${r.stdout}\n${r.stderr}`) };
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
const installArgs = ['plugin', 'install', pluginId(spec), '--scope', scope, ...(useJson ? ['--json'] : [])];
|
|
103
|
+
steps.push({
|
|
104
|
+
id: `${pluginId(spec)}:install`,
|
|
105
|
+
description: `Install the ${spec.pluginName} plugin (${scope} scope)`,
|
|
106
|
+
command: `${exe} ${installArgs.join(' ')}`,
|
|
107
|
+
level,
|
|
108
|
+
async run() {
|
|
109
|
+
// Never pass -y: that would accept a marketplace-declared command without the user seeing it.
|
|
110
|
+
const r = await ctx.runner.run({ command: claude.command, args: installArgs, cwd: ctx.root, timeoutMs: 180_000, signal: ctx.signal });
|
|
111
|
+
const json = parseLastJsonLine(r.stdout);
|
|
112
|
+
if (r.aborted)
|
|
113
|
+
return { ok: false, detail: 'cancelled' };
|
|
114
|
+
if (r.timedOut)
|
|
115
|
+
return { ok: false, detail: 'timed out after 180 s (network?)' };
|
|
116
|
+
const text = `${r.stdout}\n${r.stderr}`;
|
|
117
|
+
if (json && (json.shownCommand || json.failureCode === 'command_not_accepted') || /only displayed|Run this command now/i.test(text)) {
|
|
118
|
+
return { ok: false, requiresApproval: true, detail: 'Claude Code needs you to approve a command shown by the marketplace; run the command above yourself in a terminal.' };
|
|
119
|
+
}
|
|
120
|
+
if (/already installed/i.test(text) && r.ok)
|
|
121
|
+
return { ok: true, detail: 'already installed' };
|
|
122
|
+
if (r.ok && json?.outcome !== 'failed')
|
|
123
|
+
return { ok: true, detail: 'installed', restartRequired: true };
|
|
124
|
+
return { ok: false, detail: describeFailure(json, r.stderr, r.stdout), hint: sshHint(`${r.stdout}\n${r.stderr}`) };
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
return steps;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=claudePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudePlugin.js","sourceRoot":"","sources":["../../../src/integrations/adapters/claudePlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport { compareVersions, parseLastJsonLine, type Tool } from '../exec.js';\nimport { isInside } from '../../utils/paths.js';\nimport type { AdapterContext, InstallScope, PlanStep, StepOutcome } from '../types.js';\n\n/** Minimum Claude Code versions for the flags we rely on (from the plugin CLI reference). */\nexport const MIN_PLUGIN_JSON = '2.1.268';\nexport const MIN_MARKETPLACE_JSON = '2.1.287';\n\nexport interface InstalledPlugin {\n id: string;\n version?: string;\n scope: string;\n enabled: boolean;\n projectPath?: string;\n errors?: string[];\n}\n\nexport interface NativeSpec {\n marketplaceName: string;\n /** Always an https git URL: `owner/repo` shorthand makes Claude Code try SSH, which fails without GitHub keys. */\n marketplaceUrl: string;\n pluginName: string;\n}\n\nexport const pluginId = (s: NativeSpec): string => `${s.pluginName}@${s.marketplaceName}`;\n\nexport async function listPlugins(ctx: AdapterContext, claude: Tool): Promise<{ ok: boolean; plugins: InstalledPlugin[]; error?: string }> {\n const r = await ctx.runner.run({ command: claude.command, args: ['plugin', 'list', '--json'], cwd: ctx.root, timeoutMs: 30_000, signal: ctx.signal });\n if (!r.ok) return { ok: false, plugins: [], error: (r.stderr || r.error || r.stdout).trim().slice(0, 300) || `exit ${r.code}` };\n try {\n const parsed = JSON.parse(r.stdout.trim().split(/\\r?\\n/).filter((l) => l.trim().startsWith('[')).pop() ?? r.stdout) as unknown;\n return { ok: true, plugins: Array.isArray(parsed) ? (parsed as InstalledPlugin[]) : [] };\n } catch {\n return { ok: false, plugins: [], error: 'could not parse `claude plugin list --json` output' };\n }\n}\n\nexport async function marketplaceRegistered(ctx: AdapterContext, claude: Tool, name: string): Promise<boolean | null> {\n const r = await ctx.runner.run({ command: claude.command, args: ['plugin', 'marketplace', 'list'], cwd: ctx.root, timeoutMs: 30_000, signal: ctx.signal });\n if (!r.ok) return null;\n return new RegExp(`(^|[^A-Za-z0-9._-])${name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}($|[^A-Za-z0-9._-])`, 'm').test(r.stdout);\n}\n\nexport function samePath(a: string | undefined, b: string): boolean {\n if (!a) return false;\n const norm = (p: string): string => path.resolve(p).replace(/[\\\\/]+$/, '');\n const x = norm(a);\n const y = norm(b);\n return process.platform === 'win32' ? x.toLowerCase() === y.toLowerCase() : x === y;\n}\n\n/** Match the plugin for this project: user-scope installs apply everywhere; project/local installs must belong to this root. */\nexport function findPlugin(plugins: InstalledPlugin[], id: string, root: string): InstalledPlugin | undefined {\n return plugins.find((p) => p.id === id && (p.scope === 'user' || p.scope === 'managed' || samePath(p.projectPath, root) || (p.projectPath && isInside(root, p.projectPath))));\n}\n\n/** Cheap check of settings files (no process spawn): which plugins/marketplaces are declared. */\nexport async function readDeclared(ctx: AdapterContext, spec: NativeSpec): Promise<{ marketplace: boolean; enabled: InstallScope | null }> {\n const files: [string, InstallScope][] = [\n [path.join(ctx.root, '.claude', 'settings.json'), 'project'],\n [path.join(ctx.root, '.claude', 'settings.local.json'), 'project'],\n [path.join(ctx.home, '.claude', 'settings.json'), 'user'],\n ];\n let marketplace = false;\n let enabled: InstallScope | null = null;\n for (const [file, scope] of files) {\n try {\n const j = JSON.parse(await fs.readFile(file, 'utf8')) as { extraKnownMarketplaces?: Record<string, unknown>; enabledPlugins?: Record<string, unknown> };\n if (j.extraKnownMarketplaces && spec.marketplaceName in j.extraKnownMarketplaces) marketplace = true;\n if (j.enabledPlugins && j.enabledPlugins[pluginId(spec)] === true && enabled === null) enabled = scope;\n } catch {\n /* missing or unreadable */\n }\n }\n return { marketplace, enabled };\n}\n\nexport const SSH_FIX = 'git config --global url.\"https://github.com/\".insteadOf git@github.com:';\n\n/** Claude Code clones plugin sources over SSH by default; without a GitHub SSH key that fails with these messages. */\nexport function sshHint(text: string): string | undefined {\n return /host key verification failed|permission denied \\(publickey\\)|could not read from remote repository/i.test(text)\n ? `Claude Code cloned over SSH and you have no usable GitHub SSH key. The fix documented by Agent Skills changes your global Git config, so run it yourself, then re-run setup: ${SSH_FIX}`\n : undefined;\n}\n\nfunction describeFailure(json: Record<string, unknown> | null, stderr: string, stdout: string): string {\n const msg = typeof json?.message === 'string' ? json.message : (stderr || stdout).trim().split(/\\r?\\n/).filter(Boolean).slice(-2).join(' ');\n return msg.slice(0, 400) || 'the command failed without output';\n}\n\n/** Steps that register the marketplace (if needed) and install the plugin at the given scope. */\nexport function nativeSteps(ctx: AdapterContext, claude: Tool, spec: NativeSpec, scope: InstallScope, opts: { registered: boolean }): PlanStep[] {\n const steps: PlanStep[] = [];\n const level = scope === 'user' ? 'user-config' : 'project';\n const useMpJson = compareVersions(claude.version, MIN_MARKETPLACE_JSON) >= 0;\n const useJson = compareVersions(claude.version, MIN_PLUGIN_JSON) >= 0;\n const exe = path.basename(claude.command, path.extname(claude.command));\n\n if (!opts.registered) {\n const args = ['plugin', 'marketplace', 'add', spec.marketplaceUrl, '--scope', scope, ...(useMpJson ? ['--json'] : [])];\n steps.push({\n id: `${spec.marketplaceName}:marketplace`,\n description: `Register the ${spec.marketplaceName} marketplace (${scope} scope)`,\n command: `${exe} ${args.join(' ')}`,\n level,\n async run(): Promise<StepOutcome> {\n const r = await ctx.runner.run({ command: claude.command, args, cwd: ctx.root, timeoutMs: 180_000, signal: ctx.signal });\n const json = parseLastJsonLine(r.stdout);\n if (r.aborted) return { ok: false, detail: 'cancelled' };\n if (r.timedOut) return { ok: false, detail: 'timed out after 180 s (network?)' };\n if (r.ok && json?.outcome !== 'failed') return { ok: true, detail: typeof json?.message === 'string' ? json.message : 'registered' };\n if (/already (on disk|added|exists)/i.test(r.stdout + r.stderr)) return { ok: true, detail: 'already registered' };\n return { ok: false, detail: describeFailure(json, r.stderr, r.stdout), hint: sshHint(`${r.stdout}\\n${r.stderr}`) };\n },\n });\n }\n\n const installArgs = ['plugin', 'install', pluginId(spec), '--scope', scope, ...(useJson ? ['--json'] : [])];\n steps.push({\n id: `${pluginId(spec)}:install`,\n description: `Install the ${spec.pluginName} plugin (${scope} scope)`,\n command: `${exe} ${installArgs.join(' ')}`,\n level,\n async run(): Promise<StepOutcome> {\n // Never pass -y: that would accept a marketplace-declared command without the user seeing it.\n const r = await ctx.runner.run({ command: claude.command, args: installArgs, cwd: ctx.root, timeoutMs: 180_000, signal: ctx.signal });\n const json = parseLastJsonLine(r.stdout);\n if (r.aborted) return { ok: false, detail: 'cancelled' };\n if (r.timedOut) return { ok: false, detail: 'timed out after 180 s (network?)' };\n const text = `${r.stdout}\\n${r.stderr}`;\n if (json && (json.shownCommand || json.failureCode === 'command_not_accepted') || /only displayed|Run this command now/i.test(text)) {\n return { ok: false, requiresApproval: true, detail: 'Claude Code needs you to approve a command shown by the marketplace; run the command above yourself in a terminal.' };\n }\n if (/already installed/i.test(text) && r.ok) return { ok: true, detail: 'already installed' };\n if (r.ok && json?.outcome !== 'failed') return { ok: true, detail: 'installed', restartRequired: true };\n return { ok: false, detail: describeFailure(json, r.stderr, r.stdout), hint: sshHint(`${r.stdout}\\n${r.stderr}`) };\n },\n });\n return steps;\n}\n"]}
|